xml - 使用 xsl 方法 for-each 的问题

标签 xml xslt

我正在尝试使用 XSL 转换此 XML:

<book><title>This is a <b>great</b> book</title></book>

进入这个 XML:

<book>This is a <bold>great</bold> book</book>

使用这个 xsl:

<xsl:for-each select="book/title/*">
<xsl:choose>
    <xsl:when test="name() = 'b'">
        <bold>
            <xsl:value-of select="text()"/>
        </bold>
    </xsl:when>
    <xsl:otherwise>
        <xsl:value-of select="text()"/>
    </xsl:otherwise>
</xsl:choose>
</xsl:for-each>

但我的输出看起来像这样:

<book><bold>great</bold></bold>

谁能解释为什么 <title> 的根文本迷路了吗?我认为我的 for-each select 语句可能需要修改,但我不知道应该修改什么。

请记住,我不能使用 <xsl:template match>因为我的样式表很复杂。

谢谢!

最佳答案

这个 XPath 表达式:

book/title/*

表示“book/title 的所有子元素”。在你的情况下,book/title有 3 个子节点:

  • 文本节点:This is a
  • 元素节点:<b>...</b>
  • 文本节点:book

如您所见,只有其中一个是元素,并被选中。如果要获取所有子节点,包括文本和元素,请使用:

book/title/node()

如果你想单独获取文本节点,使用这个:

book/title/text()

关于xml - 使用 xsl 方法 for-each 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1821109/

相关文章:

php - 你如何解析和处理 PHP 中的 HTML/XML?

android - 如何创建像TextView和EditText这样的Whatsapp?

XML 中的 Android onClick 与 OnClickListener

xml - 使用 group-by 对元素进行分组

python - 排序 XML 文件

java - vtd-xml 获取/删除属性名称和值

xml - XPath 1.0 在 XML 树中具有属性的最接近的前导和/或祖先节点

C#:从 XML 架构 (XSD) 文件自动生成 DDL 和 ORM 类

xml - 如何将 XML 显示为 HTML 表格

xml - Save XML 在格式化 preservewhitespace 时不格式化新节点