输入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>
任何帮助都会很棒。
答案 0 :(得分:1)
而不是
<xsl:variable name="ProductID" select="@ID">
<xsl:value-of select="replace(.,/,-)"/>
</xsl:variable>
使用
<xsl:variable name="ProductID" select="replace(@ID, '/', '-')"/>