我有这样的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事物很陌生。
提前谢谢你。
答案 0 :(得分:19)
基本上你需要使用覆盖规则进行身份转换。
以下转换
<?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
而不是实际内容。