16

我有一个这样的 XML

<?xml version="1.0" encoding="UTF-8"?>
<OMDefault xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
   <PrintDollarsAndCents>X</PrintDollarsAndCents>
   <MailAddrLine1>Add1</MailAddrLine1>
   <MailAddrLine2>Add2</MailAddrLine2>
</OMDefault>

我想要一个 XSLT 将 XML 转换成这个

<?xml version="1.0" encoding="UTF-8"?>
<OMDefault xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
   <PrintDollarsAndCents>Y</PrintDollarsAndCents>
   <MailAddrLine1>Add1</MailAddrLine1>
   <MailAddrLine2>Add2</MailAddrLine2>
 </OMDefault>

请注意,如果属性为 PrintDollarsAndCents 且其值为“X”,则“X”将转换为“Y”,有人可以帮我解决这个问题吗?因为我对这个 XSLT 很陌生。

先感谢您。

4

1 回答 1

26

基本上你想要一个具有覆盖规则的身份转换。

以下变换

<?xml version="1.0" encoding="utf-8"?>
<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>

    <xsl:template match="PrintDollarsAndCents/text()[.='X']">Y</xsl:template>

</xsl:stylesheet>

应用于您的输入,产生结果:

<OMDefault xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
   <PrintDollarsAndCents>Y</PrintDollarsAndCents>
   <MailAddrLine1>Add1</MailAddrLine1>
   <MailAddrLine2>Add2</MailAddrLine2>
</OMDefault>

第一个模板是一个恒等变换,它精确地复制输入文档。

第二个模板覆盖文本节点,其值为模板X的子级PrintDollarsAndCents。请注意,它发出的是值Y而不是其实际内容。

于 2013-07-10T00:48:22.697 回答