web-dev-qa-db-ja.com

XSLTの子ノード値に基づいてノードを選択します

子ノードの値が特定の値と一致するノードのみを選択したいと思います。

これが私の元の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>

XSLT1.0の使用に制限されています。

ガイダンスを提供してください。一致しない他のサブノードのすべてのサブノードを削除する方法に固執しています。

よろしく、ラフル

10
Rahul

以下は、AAAに等しいサブノード「名前」を持つすべてのエントリノードを選択します。

//Entry[Name = "AAA"]
15
xshoppyx

次のようなものを試してください(整形式の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>
4
jpj

どうですか

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

テキストコンテンツがAAAであるすべてのNameノードを見つけてから、1レベル上に移動してNameの親ノード(Entry)に移動します。

3
Marc B