首页 文章

根据XSLT中的子节点值选择节点

提问于
浏览
9

我想只选择那些子节点值与某个值匹配的节点 .

这是我的原始XML:

这是我的原始XML

<Entry>
 <Name>AAA</Name>
 <line id="1">A</line>
 <line id="2">B</line>
</Entry>
<Entry>
 <Name>BBB</Name>
 <line id="1">C</line>
 <line id="2">D</line>
</Entry>
<Entry>
 <Name>AAA</Name>
 <line id="1">E</line>
 <line id="2">F</line>
</Entry>
<Entry>
 <Name>CCC</Name>
 <line id="1">G</line>
 <line id="2">H</line>
</Entry>

我想提取Name ='AAA'的所有条目,结果将是:

<Entry>
 <Name>AAA</Name>
 <line id="1">A</line>
 <line id="2">B</line>
</Entry>
<Entry>
 <Name>AAA</Name>
 <line id="1">E</line>
 <line id="2">F</line>
</Entry>

我只能使用XSLT 1.0 .

请提供任何指导 . 我被困在如何丢弃所有不匹配的子节点 .

问候,拉胡尔

3 回答

  • 14

    尝试这样的事情(添加List元素以获得格式良好的xml):

    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
      <xsl:template match="/">
        <List>
          <xsl:apply-templates select="//Entry[Name='AAA']"/>
        </List>
      </xsl:template>
    
      <xsl:template match="Entry">
        <xsl:copy-of select="."/>
      </xsl:template>
    
    </xsl:stylesheet>
    
  • 2

    怎么样

    //Name[text()='AAA']/..
    

    找到文本内容为AAA的所有 Name 节点,然后向上移动一级到名称's parent node, which' d为 Entry .

  • 1

    以下将选择子节点“Name”等于AAA的所有入口节点 .

    //Entry[Name = "AAA"]
    

相关问题