【问题标题】:XSLT replace valueXSLT 替换值
【发布时间】:2013-07-10 00:19:18
【问题描述】:

我有一个这样的 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 很陌生。

提前谢谢你。

【问题讨论】:

  • 您的输出看起来与您的输入相同,我不明白您的“请注意”这句话。当在输入中检测到您的特殊情况时,您能否显示您希望看到的输出?你会如何用伪代码编写特殊情况检测?
  • 抱歉搞错了,应该是这样的 w3.org/2001/XMLSchema-instance"> YAdd1Add2

标签: xml xslt


【解决方案1】:

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

以下变换

<?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 而不是其实际内容。

【讨论】:

  • 如果我有这样的东西 w3.org/2001/XMLSchema-instance"> XAdd2 我想要一个 XSLT 来将 XML 转换成这个 w3.org/2001/XMLSchema-instance"> YAdd1Add2
  • @DuyTran,请更新您的问题或提出新问题。 cmets中的代码很难阅读。
  • Harpo,有一个限制,我不能全部发布。请转到此链接stackoverflow.com/questions/17734294/xslt-match-and-replace 谢谢
  • 我认为您的身份转换需要添加一点点。我发现它没有保留 Unicode 编码。添加以下内容使其对我有用:
猜你喜欢
  • 2014-07-26
  • 2011-11-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-08
  • 1970-01-01
  • 1970-01-01
  • 2011-03-05
相关资源
最近更新 更多