2012-09-24 91 views
9

我只想選擇子節點值與特定值匹配的那些節點。根據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> 

我想提取的所有條目,其中名稱= '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。

請提供任何指導。我堅持如何刪除所有不匹配的其他子節點。

問候, 拉胡爾

回答

13

以下將選擇所有具有等於AAA的子節點「名稱」的入口節點。

//Entry[Name = "AAA"] 
1

如何

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

找到所有Name節點,其文本內容爲AAA級,那麼一個水平拉昇至名的父節點,which'd是Entry

2

嘗試這樣的事情(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>