如何更改节点值 XSLT



我想在一个 xml 上有一些修饰,我尝试使用 xslt 句子,但我无法做到,复制后我在尝试进行更改时删除了子节点。发布 XML:

`
<tree>
       <sublevel>
      <definition>subnetting</definition>
      <status>availabe</status>
      <categories>
          <category>
                    <label>IPV4</label>
                    <attributes>
                        <attribute>
                            <label>MASK</label>
                            <value>/24</value>
                        </attribute>
                        <attribute>
                            <label>STARTING_IP</label>
                            <value>10.0.0.1</value>
                        </attribute>
                        <attribute>
                            <label>Type</label>
                            <value>4</value>
                        </attribute>
                    </attributes>
                </category>
      </categories>
      <identifier>subnetworkipv4correct</identifier>
   </sublevel>
</tree>

我想使用一个 xslt 来执行输出:

'

<tree>
   <sublevel>
      <definition>subnetting</definition>
      <status>availabe</status>
      <origen>template</origen>
      <categories>
          <category>
                    <label>IP</label>
                    <attributes>
                        <attribute>
                            <label>Mask</label>
                            <value>/24</value>
                        </attribute>
                        <attribute>
                            <label>START</label>
                            <value>10.0.0.1</value>
                        </attribute>
                        <attribute>
                            <label>Version</label>
                            <value>4</value>
                        </attribute>
                    </attributes>
                </category>
      </categories>
      <identifier>subnetworkipv4correct</identifier>
      </sublevel>
    </tree>

'

我已经测试了很多模板,但我无法做到。

你需要更准确地说明你想要做什么才能得到一个完整的答案,但希望一些指针应该会有所帮助。使用标识模板,并针对需要删除/更改的特定元素覆盖它。

要删除 origen 元素,请使用以下命令:

<xsl:template match="origen"/>

这只是匹配它,并且不输出任何内容,从而有效地删除了它。

要修改label元素,可以使用以下内容:

<xsl:template match="category/label[. = 'IPV4']/text">IP</xsl:template>

或者:

<xsl:template match="category/label/text()">
  <xsl:choose>
    <xsl:when test=". = 'IPV4']">IP</xsl:when>
    <xsl:otherwise>(default)</xsl:otherwise>
  </xsl:choose>
</xsl:template>

您可以通过类似的方式更改其他元素的值。

此转换

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output omit-xml-declaration="yes" indent="yes"/>
  <xsl:strip-space elements="*"/>
  <xsl:template match="@*|node()" name="identity">
    <xsl:copy>
      <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
  </xsl:template>
  <xsl:template match="status[. = 'availabe']">
    <xsl:call-template name="identity"/>
    <origen>template</origen>
  </xsl:template>
  <xsl:template match="label/text()[. = 'IPV4']">IP</xsl:template>
  <xsl:template match="label/text()[. = 'STARTING_IP']">START</xsl:template>
  <xsl:template match="label/text()[. = 'Type']">Version</xsl:template>
</xsl:stylesheet>

应用于提供的 XML 文档时

<tree>
    <sublevel>
        <definition>subnetting</definition>
        <status>availabe</status>
        <categories>
            <category>
                <label>IPV4</label>
                <attributes>
                    <attribute>
                        <label>MASK</label>
                        <value>/24</value>
                    </attribute>
                    <attribute>
                        <label>STARTING_IP</label>
                        <value>10.0.0.1</value>
                    </attribute>
                    <attribute>
                        <label>Type</label>
                        <value>4</value>
                    </attribute>
                </attributes>
            </category>
        </categories>
        <identifier>subnetworkipv4correct</identifier>
    </sublevel>
</tree>

产生完全想要的结果

<tree>
   <sublevel>
      <definition>subnetting</definition>
      <status>availabe</status>
      <origen>template</origen>
      <categories>
         <category>
            <label>IP</label>
            <attributes>
               <attribute>
                  <label>MASK</label>
                  <value>/24</value>
               </attribute>
               <attribute>
                  <label>START</label>
                  <value>10.0.0.1</value>
               </attribute>
               <attribute>
                  <label>Version</label>
                  <value>4</value>
               </attribute>
            </attributes>
         </category>
      </categories>
      <identifier>subnetworkipv4correct</identifier>
   </sublevel>
</tree>

注意:要更系统和牢固地掌握 XSLT,请观看我的 Pluralsight 课程"XSLT 2.0 和 1.0 基础"

另请参阅:https://stackoverflow.com/a/322079/36305

相关内容

  • 没有找到相关文章

最新更新