質問編集履歴

1

スミマセン。「ここまでは良かった」までの部分に自分で解決できるミスがあったので修正しました。

2020/04/07 09:07

投稿

UG_ito_Pcorp
UG_ito_Pcorp

スコア13

test CHANGED
File without changes
test CHANGED
@@ -86,7 +86,15 @@
86
86
 
87
87
  <xsl:template match="node()">
88
88
 
89
+ <xsl:choose>
90
+
91
+ <xsl:when test="@outputclass!='title1'">
92
+
89
- <p><xsl:value-of select="."/></p>
93
+ <p><xsl:value-of select="."/></p>
94
+
95
+ </xsl:when>
96
+
97
+ </xsl:choose>
90
98
 
91
99
  </xsl:template>
92
100
 
@@ -104,180 +112,180 @@
104
112
 
105
113
  <body>
106
114
 
115
+ <p>Martin</p>
116
+
117
+ <p>Gibson</p>
118
+
119
+ </body>
120
+
121
+ </topic>
122
+
123
+ <topic>
124
+
125
+ <title>Japanese guitar</title>
126
+
127
+ <body>
128
+
129
+ <p>Yamaha</p>
130
+
131
+ <p>Morris</p>
132
+
133
+ </body>
134
+
135
+ </topic>
136
+
137
+ ```
138
+
139
+ ### 不具合の内容
140
+
141
+
142
+
143
+ ここまでは良かったのですが、ソースが以下のような場合(B)、グループのスタート条件を変更しても、同様の結果が得られません。
144
+
145
+
146
+
147
+ サンプルソース(B)
148
+
149
+ ```ここに言語を入力
150
+
151
+ <topic id="">
152
+
153
+ <title>Guitar maker</title>
154
+
155
+ <body>
156
+
157
+ <para>
158
+
159
+ <prop outputclass="title1"/>
160
+
107
161
  <p>Imported guitar</p>
108
162
 
163
+ </para>
164
+
165
+ <para>
166
+
167
+ <prop outputclass="body"/>
168
+
109
169
  <p>Martin</p>
110
170
 
171
+ </para>
172
+
173
+ <para>
174
+
175
+ <prop outputclass="body"/>
176
+
111
177
  <p>Gibson</p>
112
178
 
179
+ </para>
180
+
181
+ <para>
182
+
183
+ <prop outputclass="title1"/>
184
+
185
+ <p>Japanese guitar</p>
186
+
187
+ </para>
188
+
189
+ <para>
190
+
191
+ <prop outputclass="body"/>
192
+
193
+ <p>Yamaha</p>
194
+
195
+ </para>
196
+
197
+ <para>
198
+
199
+ <prop outputclass="body"/>
200
+
201
+ <p>Morris</p>
202
+
203
+ </para>
204
+
205
+ </body>
206
+
207
+ </topic>
208
+
209
+ ```
210
+
211
+ XSLT(B):
212
+
213
+ ```ここに言語を入力
214
+
215
+ <xsl:template match="body">
216
+
217
+ <xsl:for-each-group select="para" group-starting-with="para/prop[@outputclass='title1']">
218
+
219
+ <topic>
220
+
221
+ <xsl:choose>
222
+
223
+ <xsl:when test="current-group()[self::para/prop[@outputclass='title1']]">
224
+
225
+ <title>
226
+
227
+ <xsl:value-of select="./p"/>
228
+
229
+ </title>
230
+
231
+ <body>
232
+
233
+ <xsl:apply-templates select="current-group()/p"/>
234
+
235
+ </body>
236
+
237
+ </xsl:when>
238
+
239
+ </xsl:choose>
240
+
241
+ </topic>
242
+
243
+ </xsl:for-each-group>
244
+
245
+ </xsl:template>
246
+
247
+
248
+
249
+ <xsl:template match="p">
250
+
251
+ <xsl:choose>
252
+
253
+ <xsl:when test="../prop/@outputclass!='title1'">
254
+
255
+ <p><xsl:value-of select="."/></p>
256
+
257
+ </xsl:when>
258
+
259
+ </xsl:choose>
260
+
261
+ </xsl:template>
262
+
263
+ ```
264
+
265
+ 残念なアウトプット(B):
266
+
267
+ ```ここに言語を入力
268
+
269
+ <map>Guitar maker</map>
270
+
271
+ <topic>
272
+
273
+ <title>Imported guitar</title>
274
+
275
+ <body>
276
+
277
+ <p>Martin</p>
278
+
279
+ <p>Gibson</p>
280
+
281
+ <p>Yamaha</p>
282
+
283
+ <p>Morris</p>
284
+
113
285
  </body>
114
286
 
115
287
  </topic>
116
288
 
117
- <topic>
118
-
119
- <title>Japanese guitar</title>
120
-
121
- <body>
122
-
123
- <p>Japanese guitar</p>
124
-
125
- <p>Yamaha</p>
126
-
127
- <p>Morris</p>
128
-
129
- </body>
130
-
131
- </topic>
132
-
133
- ```
134
-
135
- ### 不具合の内容
136
-
137
-
138
-
139
- ここまでは良かったのですが、ソースが以下のような場合(B)、グループのスタート条件を変更しても、同様の結果が得られません。
140
-
141
-
142
-
143
- サンプルソース(B)
144
-
145
- ```ここに言語を入力
146
-
147
- <topic id="">
148
-
149
- <title>Guitar maker</title>
150
-
151
- <body>
152
-
153
- <para>
154
-
155
- <prop outputclass="title1"/>
156
-
157
- <p>Imported guitar</p>
158
-
159
- </para>
160
-
161
- <para>
162
-
163
- <prop outputclass="body"/>
164
-
165
- <p>Martin</p>
166
-
167
- </para>
168
-
169
- <para>
170
-
171
- <prop outputclass="body"/>
172
-
173
- <p>Gibson</p>
174
-
175
- </para>
176
-
177
- <para>
178
-
179
- <prop outputclass="title1"/>
180
-
181
- <p>Japanese guitar</p>
182
-
183
- </para>
184
-
185
- <para>
186
-
187
- <prop outputclass="body"/>
188
-
189
- <p>Yamaha</p>
190
-
191
- </para>
192
-
193
- <para>
194
-
195
- <prop outputclass="body"/>
196
-
197
- <p>Morris</p>
198
-
199
- </para>
200
-
201
- </body>
202
-
203
- </topic>
204
-
205
- ```
206
-
207
- XSLT(B):
208
-
209
- ```ここに言語を入力
210
-
211
- <xsl:template match="body">
212
-
213
- <xsl:for-each-group select="para" group-starting-with="para/prop[@outputclass='title1']">
214
-
215
- <topic>
216
-
217
- <xsl:choose>
218
-
219
- <xsl:when test="current-group()[self::para/prop[@outputclass='title1']]">
220
-
221
- <title>
222
-
223
- <xsl:value-of select="./p"/>
224
-
225
- </title>
226
-
227
- <body>
228
-
229
- <xsl:apply-templates select="current-group()/p"/>
230
-
231
- </body>
232
-
233
- </xsl:when>
234
-
235
- </xsl:choose>
236
-
237
- </topic>
238
-
239
- </xsl:for-each-group>
240
-
241
- </xsl:template>
242
-
243
-
244
-
245
- <xsl:template match="p">
246
-
247
- <p><xsl:value-of select="."/></p>
248
-
249
- </xsl:template>
250
-
251
- ```
252
-
253
- 残念なアウトプット(B):
254
-
255
- ```ここに言語を入力
256
-
257
- <map>Guitar maker</map>
258
-
259
- <topic>
260
-
261
- <title>Imported guitar</title>
262
-
263
- <body>
264
-
265
- <p>Imported guitar</p>
266
-
267
- <p>Martin</p>
268
-
269
- <p>Gibson</p>
270
-
271
- <p>Japanese guitar</p>
272
-
273
- <p>Yamaha</p>
274
-
275
- <p>Morris</p>
276
-
277
- </body>
278
-
279
- </topic>
280
-
281
289
  ```
282
290
 
283
291
  ネットで公開されていたサンプルを見様見真似で流用しています。