回答編集履歴

2

ブラウザで閲覧するための説明を追加

2020/07/26 23:24

投稿

gemmaro
gemmaro

スコア358

test CHANGED
@@ -19,6 +19,10 @@
19
19
 
20
20
 
21
21
  上記の点について修正したものが以下です。
22
+
23
+
24
+
25
+ 註記:当初 XSLT ファイル名に関する XML ファイルからのリンクによる制約を見落として `main.xsl` としていましたが、ブラウザから表示してみる場合などでは `xslt.xsl` としなければ正しい表示が得られません。
22
26
 
23
27
 
24
28
 
@@ -102,7 +106,11 @@
102
106
 
103
107
 
104
108
 
105
- 実行
109
+ ## 実行
110
+
111
+
112
+
113
+ ### コマンドライン
106
114
 
107
115
 
108
116
 
@@ -117,3 +125,57 @@
117
125
 
118
126
 
119
127
  `test` 属性値が真の内容のみ実行されていることがわかります。
128
+
129
+
130
+
131
+ ### ブラウザ
132
+
133
+
134
+
135
+ ブラウザで確認する場合、単に XML ファイルを開いても意図通りに表示されない可能性があります。
136
+
137
+ 例えば Firefox ですと、`クロスオリジン要求をブロックしました: 同一生成元ポリシーにより、file:///Users/gemmaro/***/xslt.xsl にあるリモートリソースの読み込みは拒否されます (理由: CORS 要求が http でない)。` というエラーが Firefox のコンソールに表示されてしまいます。localhost で見てみることにしましょう。
138
+
139
+ XML ファイルなどがあるディレクトリで
140
+
141
+
142
+
143
+ ```
144
+
145
+ $ ruby -run -e httpd . -p 8000
146
+
147
+ ```
148
+
149
+
150
+
151
+ として
152
+
153
+
154
+
155
+ ```
156
+
157
+ [2020-07-27 08:01:51] INFO WEBrick 1.6.0
158
+
159
+ [2020-07-27 08:01:51] INFO ruby 2.7.1 (2020-03-31) [x86_64-darwin19]
160
+
161
+ [2020-07-27 08:01:51] INFO WEBrick::HTTPServer#start: pid=4410 port=8000
162
+
163
+ ```
164
+
165
+
166
+
167
+ このようにログが出て来始めたら OK です。
168
+
169
+ Firefox にて `localhost:8000/index.xml` を開いてみましょう。
170
+
171
+
172
+
173
+ するとまだエラーになります。
174
+
175
+
176
+
177
+ ![エラー画面](e40aa91f687b454f9faa139128d3b39d.png)
178
+
179
+
180
+
181
+ このエラーの意味は取れないのですが、`xslt.xsl` というファイルを用意した覚えはないので、XML から XSLT ファイルへのリンクに見合った XSLT のファイル名ではなかったということに気が付きます。`main.xsl` としていたものを `xslt.xsl` としてブラウザを再読込すれば意図通りの表示を得ます。

1

実例を追加

2020/07/26 23:24

投稿

gemmaro
gemmaro

スコア358

test CHANGED
@@ -1,4 +1,4 @@
1
- いくつかの修正点が提案されます:
1
+ # 修正点
2
2
 
3
3
 
4
4
 
@@ -11,3 +11,109 @@
11
11
  * 閉じタグの位置の前後:`</BODY></HTML>` の出現位置。`xsl:template` の外に出ています
12
12
 
13
13
  * その他の簡略化:`<xsl:template match="/">...` をなくす。`<xsl:template match="family">...` だけで充分です
14
+
15
+
16
+
17
+ # 実例
18
+
19
+
20
+
21
+ 上記の点について修正したものが以下です。
22
+
23
+
24
+
25
+ ファイル構造:
26
+
27
+
28
+
29
+ ```
30
+
31
+ $ exa
32
+
33
+ index.xml main.xsl
34
+
35
+ ```
36
+
37
+
38
+
39
+ `index.xml`:
40
+
41
+
42
+
43
+ ```xml
44
+
45
+ <?xml version="1.0" encoding="UTF-8"?>
46
+
47
+ <?xml-stylesheet type="text/xsl" href="xslt.xsl"?>
48
+
49
+ <family>
50
+
51
+ <brother>兄</brother>
52
+
53
+ <sister>姉</sister>
54
+
55
+ </family>
56
+
57
+ ```
58
+
59
+
60
+
61
+ `main.xsl`:
62
+
63
+
64
+
65
+ ```xsl
66
+
67
+ <?xml version="1.0" encoding="UTF-8"?>
68
+
69
+ <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
70
+
71
+ <xsl:template match="family">
72
+
73
+ <HTML>
74
+
75
+ <BODY>
76
+
77
+ <xsl:choose>
78
+
79
+ <xsl:when test="5 > 2">
80
+
81
+ <xsl:value-of select="sister"/>
82
+
83
+ </xsl:when>
84
+
85
+ <xsl:when test="5 &lt; 2">
86
+
87
+ <xsl:value-of select="brother"/>
88
+
89
+ </xsl:when>
90
+
91
+ </xsl:choose>
92
+
93
+ </BODY>
94
+
95
+ </HTML>
96
+
97
+ </xsl:template>
98
+
99
+ </xsl:stylesheet>
100
+
101
+ ```
102
+
103
+
104
+
105
+ 実行:
106
+
107
+
108
+
109
+ ```
110
+
111
+ $ xsltproc main.xsl index.xml
112
+
113
+ <HTML><BODY>姉</BODY></HTML>
114
+
115
+ ```
116
+
117
+
118
+
119
+ `test` 属性値が真の内容のみ実行されていることがわかります。