XSLT:将包含子节点的输入xml复制到XSLT中的属性

时间:2018-04-10 08:37:52

标签: xml xslt xslt-1.0

你可以帮我用xslt帮助我在预期输出下面进行练习。

  

输入

<Order OrderNotificationID="123456" OrderNo="40003773" >       
<OrderLines>
<OrderLine Action="CANCEL" EAN="" LineNo="1"> </OrderLine>
        <OrderLine Action="CANCEL" EAN="" LineNo="4"> </OrderLine>
    </OrderLines> 
</Order>     
  

预期输出

<NewXML InputXML= "<Order OrderNotificationID="123456" OrderNo="40003773"><OrderLines>
<OrderLine Action="CANCEL" EAN="" LineNo="1"/>
<OrderLine Action="CANCEL" EAN="" LineNo="4"/>
</OrderLines></Order>" />

1 个答案:

答案 0 :(得分:0)

如果您真的想将输入XML的序列化放入属性值,那么您需要编写代码或使用将XML序列化为字符串的库,示例

<xsl:stylesheet
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    version="1.0">

  <xsl:import href="http://lenzconsulting.com/xml-to-string/xml-to-string.xsl"/>

  <xsl:template match="/">
      <xsl:variable name="serialized-xml">
          <xsl:apply-templates mode="xml-to-string"/>
      </xsl:variable>
      <NewXML InputXml="{$serialized-xml}"/>
  </xsl:template>

</xsl:stylesheet>

使用http://lenzconsulting.com/xml-to-string/中的库。但您需要了解格式良好的XML输出意味着<"等字符将在属性值中转义,因此结果如下所示

<NewXML InputXml="&lt;Order OrderNotificationID=&quot;123456&quot; OrderNo=&quot;40003773&quot;&gt;       &#xA;&lt;OrderLines&gt;&#xA;&lt;OrderLine Action=&quot;CANCEL&quot; EAN=&quot;&quot; LineNo=&quot;1&quot;&gt; &lt;/OrderLine&gt;&#xA;        &lt;OrderLine Action=&quot;CANCEL&quot; EAN=&quot;&quot; LineNo=&quot;4&quot;&gt; &lt;/OrderLine&gt;&#xA;    &lt;/OrderLines&gt; &#xA;&lt;/Order&gt;" />