【问题标题】:XSLT 1.0 add element with attribute if it doesn't exist如果元素不存在,XSLT 1.0 添加带有属性的元素
【发布时间】:2018-07-20 00:51:42
【问题描述】:

如果xml文件中不存在具有属性的元素,我该如何添加它。我要补充

<c name="EX1">testing</c>

每个“m”节点(如果不存在)

<?xml version="1.0" encoding="UTF-8"?>
<h>
  <m>
    <c name="HM">G</c>
    <c name="HL">20</c>
    <c name="HS">f</c>
  </m>
  <m>
    <c name="HM">L</c>
    <c name="HL">30</c>
    <c name="HS">t</c>
  </m>
  <m>
    <c name="HM">S</c>
    <c name="HL">10</c>
    <c name="HS">t</c>
    <c name="EX1">testing</c>
  </m>
</h>

这是我的 xslt

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:strip-space elements="*"/>
  <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes" />

  <xsl:template match="@* | node()">
    <xsl:copy>
      <xsl:apply-templates select="@* | node()" />
    </xsl:copy>
  </xsl:template>

</xsl:stylesheet>

这是我想要的输出

 <?xml version="1.0" encoding="UTF-8"?>
    <h>
      <m>
        <c name="HM">G</c>
        <c name="HL">20</c>
        <c name="HS">f</c>
        <c name="EX1">testing</c>
      </m>
      <m>
        <c name="HM">L</c>
        <c name="HL">30</c>
        <c name="HS">t</c>
        <c name="EX1">testing</c>
      </m>
      <m>
        <c name="HM">S</c>
        <c name="HL">10</c>
        <c name="HS">t</c>
        <c name="EX1">testing</c>
      </m>
    </h>

【问题讨论】:

  • 您能否编辑您的问题以显示您迄今为止尝试过的任何 XSLT,即使它只是身份模板。谢谢!
  • 您的意思是&lt;c name="EX1"&gt; 节点需要添加到m 元素,而不是h?还显示您的预期输出会有所帮助。谢谢!
  • 你是对的,我已经更新了问题

标签: xslt attributes add element


【解决方案1】:

使用标识模板后,您需要做的就是添加第二个模板匹配 m 元素(我假设您的意思是 m 不是 h 这里)所需的节点不存在,就像这样

<xsl:template match="m[not(c[@name='EX1' and text()='testing'])]">
  <xsl:copy>
    <xsl:apply-templates select="@* | node()" />
    <c name="EX1">testing</c>
  </xsl:copy>
</xsl:template>

【讨论】:

  • 谢谢蒂姆,非常感谢
猜你喜欢
  • 2016-12-03
  • 2016-02-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多