11

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

这是我的原始 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。

请提供任何指导。我被困在如何为不匹配的其他人删除所有子节点。

问候, 拉胡尔

4

3 回答 3

17

以下将选择子节点“名称”等于 AAA 的所有入口节点。

//Entry[Name = "AAA"]
于 2012-09-24T02:24:49.750 回答
4

尝试这样的事情(添加列表元素以获得格式良好的 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>
于 2016-02-21T16:44:45.643 回答
3

怎么样

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

查找所有Name文本内容为 AAA 的节点,然后向上移动一级到 Name 的父节点,即Entry.

于 2012-09-24T02:03:06.763 回答