我有一个这样的XML
<;?xml version=“1.0”encoding=“UTF-8”?>;
<;omdefaultxmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance“>;
<;PrintDollarsAndCents>;X</PrintDollarsAndCents>;
<;MailAddrLine1>;地址1</MailAddrLine1>;
<;MailAddrLine2>;Add2</MailAddrLine2>;
</OMDefault>;
我希望使用XSLT将XML转换为
<;?xml version=“1.0”encoding=“UTF-8”?>;
<;omdefaultxmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance“>;
<;PrintDollarsAndCents>;Y</PrintDollarsAndCents>;
<;MailAddrLine1>;地址1</MailAddrLine1>;
<;MailAddrLine2>;Add2</MailAddrLine2>;
</OMDefault>;
请注意,如果属性为PrintDollarsAndCents且其值为“X”,则“X”将转换为“Y”
有人能帮我吗?因为我对XSLT非常陌生
先谢谢你
基本上,您需要一个带有覆盖规则的标识转换
下面的转换
<;?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']”gt;Y</xsl:template>;
</xsl:stylesheet>;
应用于您的输入,将生成以下结果:
<;omdefaultxmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance“>;
<;PrintDollarsAndCents>;Y</PrintDollarsAndCents>;
<;MailAddrLine1>;地址1</MailAddrLine1>;
<;MailAddrLine2>;Add2</MailAddrLine2>;
</OMDefault>;
第一个模板是标识转换,它精确复制输入文档
第二个模板覆盖值为X的文本节点,这些节点是PrintDollarsAndCents模板的子节点。请注意,它发出的是值Y,而不是其实际内容