如果不存在,XSLT 1.0会添加带有属性的elemet

时间:2018-02-09 09:29:45

标签: xslt attributes add element

如果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>

感谢您寻找

此致

1 个答案:

答案 0 :(得分:2)

使用身份模板后,您需要做的就是添加第二个匹配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>