【问题标题】:New line separator for xslt/xmlxslt/xml 的新行分隔符
【发布时间】:2017-02-16 17:53:50
【问题描述】:

我有一个用于导入 XML 文件的 xslt 样式表。有一个循环连接一个名为“Note”的子节点。我试图让每个音符节点用新行分隔,但我不知道要输入的字符。在此先感谢您的帮助。这是我的代码:

xslt

<xsl:if test="Note">
    <xsl:call-template name="join">
        <xsl:with-param name="list" select="Note" />
        <xsl:with-param name="separator" select="';'" />
    </xsl:call-template>
</xsl:if>

<xsl:template name="join">
    <xsl:param name="list" />
    <xsl:param name="separator"/>

    <xsl:for-each select="$list">
        <xsl:value-of select="." />
        <xsl:if test="position() != last()">
            <xsl:value-of select="$separator" />
        </xsl:if>
    </xsl:for-each>
</xsl:template>

XML 节点:

 <App action="A" id="65806">
      <BaseVehicle id="6664"/> 
      <BodyType id="5"/>  
      <Note>Upgrade</Note>
      <Note>replacement unit comes with a new dustcover / bumper assembly.</Note>
      <Qty>2</Qty>
      <PartType id="7584"/>  
      <Position id="30"/> 
 </App>

预期输出

目前...

 Upgrade;replacement unit comes with a new dustcover / bumper assembly.

试图让它看起来像......

 Upgrade
 replacement unit comes with a new dustcover / bumper assembly.

【问题讨论】:

标签: xml xslt


【解决方案1】:

您还没有向我们展示可以按原样运行的 XSLT。我猜你想改变:

<xsl:with-param name="separator" select="';'" />

到:

<xsl:with-param name="separator" select="'&#10;'" />

或者可能(对于 Windows):

<xsl:with-param name="separator" select="'&#13;&#10;'" />

【讨论】:

  • 不要尝试输出&amp;#13; - 它会在序列化输出中明确显示为&amp;#13; 或&amp;#xD;。
  • 那就错了。序列化规范说“这个规则的结果是某些字符必须作为字符引用输出,以确保它们通过序列化和解析在往返过程中幸存下来。具体来说,文本节点中的 CR、NEL 和 LINE SEPARATOR 字符必须分别输出作为 " "、"…" 和 "
" 或它们的等价物;..."(这是 2.0,但您可以为 1.0 推导出相同的规则,尽管它不太明确。)
  • @MichaelKay 你肯定不是在暗示撒克逊的输出是错误的吗?无论如何,我查过你引用的那段话:它列在XML Output Method 下。我认为这里考虑的输出方法是文本是不言而喻的。
  • 我没有看到 xsl:output 声明,但从上下文来看,我猜你可能是正确的,它是 method="text"(或者如果不是,它可能应该是)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-11
  • 2013-08-26
  • 1970-01-01
  • 2023-04-04
  • 1970-01-01
相关资源
最近更新 更多