XSLT 身份转换而不更改输出

标签 xslt xslt-1.0

是否可以进行 xslt 身份转换,而源代码绝对不会发生任何更改?

当我使用以下模板时,输出中的 ident 和换行符会发生更改,并且我不想对源 xml 进行任何更改。

XSLT

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="@*|node()">
    <xsl:copy>
        <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>  
</xsl:template>

输入

<S:Envelope
  xmlns:S="http://www.w3.org/2003/05/soap-envelope" 
  xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing"
  xmlns:f123="http://www.fabrikam123.example/svc53">
  <S:Header>
    <wsa:MessageID>
      uuid:aaaabbbb-cccc-dddd-eeee-wwwwwwwwwww
    </wsa:MessageID>
    <wsa:RelatesTo>
      uuid:aaaabbbb-cccc-dddd-eeee-ffffffffffff
    </wsa:RelatesTo>
    <wsa:To S:mustUnderstand="1">
      http://business456.example/client1
    </wsa:To>
    <wsa:Action>http://fabrikam123.example/mail/DeleteAck</wsa:Action>
  </S:Header>
  <S:Body>
    <f123:DeleteAck/>
  </S:Body>
</S:Envelope>

输出

<?xml version="1.0" encoding="UTF-8"?><S:Envelope xmlns:S="http://www.w3.org/2003/05/soap-envelope" xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing" xmlns:f123="http://www.fabrikam123.example/svc53">
  <S:Header>
    <wsa:MessageID>
      uuid:aaaabbbb-cccc-dddd-eeee-wwwwwwwwwww
    </wsa:MessageID>
    <wsa:RelatesTo>
      uuid:aaaabbbb-cccc-dddd-eeee-ffffffffffff
    </wsa:RelatesTo>
    <wsa:To S:mustUnderstand="1">
      http://business456.example/client1
    </wsa:To>
    <wsa:Action>http://fabrikam123.example/mail/DeleteAck</wsa:Action>
  </S:Header>
  <S:Body>
    <f123:DeleteAck/>
  </S:Body>
</S:Envelope>

最佳答案

不,你不能。输入和输出 XML 将是“相同的”,因为它们生成相同的 XML 信息集,但它们不一定是逐字节相同的,这不是 XSLT 可以控制的。

为什么需要这个?如果您想轻松比较 XML 文档,请考虑使用 XML Canonicalization 。许多 XML 库都有生成规范 XML 的方法,xmllint 命令行工具可以轻松地从文件生成它。

关于XSLT 身份转换而不更改输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14945562/

相关文章:

xml - XSLT 中丢弃的 xml 中的换行符 <br>

javascript - XSLT:提供不同的数据 View

java - 尝试在java中将xslt应用于xml

css - 使用外部 CSS 显示 XSLT 的结果

xslt - XPATH/XSLT-仅匹配具有给定属性的后一个祖先

xml - XSL+XPATH : Compare previous node attribute to current node attribute

xml - XSLT 查找最低价格

xml - XSL : Copy XML and then replace some tags

javascript - javascript 中的大于运算符在 xslt 中不起作用

xslt - 如何修复一些损坏的标签