子ノードの値が特定の値と一致するノードのみを選択したいと思います。
これが私の元の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の使用に制限されています。
ガイダンスを提供してください。一致しない他のサブノードのすべてのサブノードを削除する方法に固執しています。
よろしく、ラフル
以下は、AAAに等しいサブノード「名前」を持つすべてのエントリノードを選択します。
//Entry[Name = "AAA"]
次のようなものを試してください(整形式の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>
どうですか
//Name[text()='AAA']/..
テキストコンテンツがAAAであるすべてのName
ノードを見つけてから、1レベル上に移動してNameの親ノード(Entry
)に移動します。