【发布时间】:2016-02-14 14:58:27
【问题描述】:
以下是 XML 文档,其中包含不同嵌套级别的关键元素 sr 和 ds:
<doc>
<p>
<sr>some text 1</sr>
<ds>some text 2</ds>
</p>
<p>
<span>
<sr>some text 3</sr>
<ds>some text 4</ds>
</span>
<span>
<sr><b>some</b> text 5</sr>
<ds>some text <sup>6</sup></ds>
</span>
</p>
<td colspan="2">
<sr><b>some</b> text 7</sr>
<ds>some text <b>8</b></ds>
</td>
</doc>
任务是将其按原样输出为 HTML,但如果遇到 <sr> 和 <ds> 元素,请对父元素进行一些修改:
- 将
sr的内容放入父元素的title属性中,去掉所有嵌套标签;应该只保留纯文本 - 将
ds元素的内容原封不动地放到父元素的主体中,包含所有的嵌套标签
例如,上面的文档应该是这样的:
<body>
<p title="some text 1">some text 2</p>
<p>
<span title="some text 3">some text 4</span>
<span title="some text 5">some text <sup>6</sup></span>
</p>
<td colspan="2" title="some text 7">some text <b>8</b></td>
</body>
XSLT 可以做到这一点吗?
目前我只知道如何处理像<xsl:for-each select="/level1/level2"> 这样的固定嵌套级别的 XML 元素,或者如何选择不同级别的元素但只选择它们,而我的任务是按原样输出其余部分。
你能提供线索吗?
有时我认为将文档完全读入字符串并在不使用 XSLT 的情况下进行一系列纯字符串替换会更简单。
【问题讨论】: