初学者 - XSLT替换属性值中的字符

时间:2018-02-26 10:45:19

标签: xml xslt

输入XML是:

<?xml version="1.0" encoding="UTF-8"?>
<Order_Root>
   <Header Info="Some Info" Info2="More Info" Info3="More Info">
   <Order Number="1" ID="1234/5678 Date="1/23/2018 10:53:00 AM">
      <OrderCharges Charge="0.00000" />
   </Order>
   <Order Number="2" ID="1234/5678 Date="1/23/2018 10:53:00 AM">
      <OrderCharges Charge="0.00000" />
   </Order>
   <Order Number="3" ID="1234/5678 Date="1/23/2018 10:53:00 AM">
      <OrderCharges Charge="0.00000" />
   </Order>
   </Header>
</Order_Root>

XSLT看起来像这样:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>

    <xsl:template match="Order">
        <xsl:variable name="url">
           <xsl:value-of select="@Number"/>
        </xsl:variable>
        <xsl:variable name="ProductID">
           <xsl:value-of select="@ID"/>
        </xsl:variable>
        <xsl:result-document method="xml" href="{$url}_{$ProductId}.xml">
            <SplitOrder>
            <Header>
                <xsl:copy-of select="../@*"></xsl:copy-of>
                <xsl:copy-of select="." />
            </Header>
            </SplitOrder>
        </xsl:result-document>
    </xsl:template>

</xsl:stylesheet>

不幸的是,当我运行这个时,我得到一个输出,这是一个名为“1_1234”的文件夹,在名为“5678”的文件夹中有一个xml。 所以我理解它是导致这种情况的属性ID值的正斜杠。 我修改了xsl以尝试用连字符替换/,但这对我来说似乎不起作用。

XSLT更改:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>

    <xsl:template match="Order">
        <xsl:variable name="url">
           <xsl:value-of select="@Number"/>
        </xsl:variable>
        <xsl:variable name="ProductID" select="@ID">
           <xsl:value-of select="replace(.,/,-)"/>
        </xsl:variable>
        <xsl:result-document method="xml" href="{$url}_{$ProductId}.xml">
            <SplitOrder>
            <Header>
                <xsl:copy-of select="../@*"></xsl:copy-of>
                <xsl:copy-of select="." />
            </Header>
            </SplitOrder>
        </xsl:result-document>
    </xsl:template>

</xsl:stylesheet>

任何帮助都会很棒。

1 个答案:

答案 0 :(得分:1)

而不是

   <xsl:variable name="ProductID" select="@ID">
       <xsl:value-of select="replace(.,/,-)"/>
    </xsl:variable>

使用

   <xsl:variable name="ProductID" select="replace(@ID, '/', '-')"/>