xml - 使用 XSLT 替换 XML 属性中的换行符

标签 xml xslt xslt-2.0

我需要一些 XSLT(或某些东西 - 见下文)来用替代字符替换所有属性中的换行符。

我必须处理遗留的 XML,它将所有数据存储为属性,并使用换行符来表达基数。例如:

<sample>
    <p att="John
    Paul
    Ringo"></p>
</sample>

当我在 Java 中解析文件(根据 XML 规范)时,这些换行符将被空格替换,但是我希望将它们视为列表,因此这种行为不是特别有用。

我的“解决方案”是使用 XSLT 将所有属性中的所有换行符替换为其他分隔符 - 但我对 XSLT 的了解为零。到目前为止我看到的所有示例要么非常具体,要么替换了节点内容而不是属性值。

我已经涉足 XSLT 2.0 的 replace(),但很难将所有内容组合在一起。

XSLT 是正确的解决方案吗?使用下面的 XSLT:

<xsl:template match="sample/*">
    <xsl:for-each select="@*">
        <xsl:value-of select="replace(current(), '\n', '|')"/>
    </xsl:for-each>
</xsl:template>

使用 Saxon 应用于示例 XML 输出以下内容:

John Paul Ringo

显然这种格式不是我想要的 - 这只是为了试验 replace() - 但是当我们进行 XSLT 处理时,换行符是否已标准化?如果是这样,是否有其他方法可以使用 Java 解析器将这些值解析为令状?到目前为止我只使用过 JAXB。

最佳答案

这个好像很难做。正如我在Are line breaks in XML attribute values allowed?中发现的那样- 属性中的换行符有效,但 XML 解析器对其进行规范化 ( https://stackoverflow.com/a/8188290/1324394 ),因此它可能在处理之前(以及替换之前)丢失。

关于xml - 使用 XSLT 替换 XML 属性中的换行符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17419330/

相关文章:

xslt - 使用 XSLT 重复元素 x 次

xml - 如何使用 XSLT 在日期中增加 1 天

xslt-2.0 - XSLT2.0 |撒克逊人HE |将分隔符作为参数传递

java - JAXB错误: Invalid byte 1 of 1-byte UTF-8 sequence的解释

xml - 可以自动将 ABNF 转换为 XML 吗?

PHP:自动生成的 XML 回车实体出现 w/SimpleXML 和 xpath

json - 如何获取 XSLT 中 JSON 字段的值?

Asp.net 网页在查看页面源代码中以 xml 格式可见,但在浏览器上看起来用户友好?

javascript - 您可以使用 JQuery 通过 XSLT 将 XML 转换为 XML

xslt - Diazo :if not for if-path