2011-02-27 95 views
2

我有一些的XPath:是否可以選擇一個只包含子節點子集的節點?

//tbody/tr[2]/td/div/table/tbody/tr[2]/td[position() > 1] 

這給了我一切,但第一個子節點。但是,它給了我一個td註釋的節點列表。我想選擇父tr節點,但刪除了第一個子節點td節點。

這可能只使用xpath?

+0

好問題,+1。請參閱我的答案以獲得解釋和完整,簡短的解決方案。 – 2011-02-27 20:30:44

回答

4

XPath是XML文檔的查詢語言。因此,它不能修改源XML文檔的結構或創建新的XML文檔。

創建新的已修改文檔的任務只能用XPath完成。

這是很容易使用XSLT做到:

<xsl:stylesheet version="2.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
<xsl:output omit-xml-declaration="yes" indent="yes"/> 
<xsl:strip-space elements="*"/> 

<xsl:template match="node()|@*"> 
    <xsl:copy> 
    <xsl:apply-templates select="node()|@*"/> 
    </xsl:copy> 
</xsl:template> 

<xsl:template match="tr[2]/td[1]"/> 
</xsl:stylesheet> 

當這種轉變是在下面的XML文檔應用:

<table> 
<tr> 
    <td>1</td> 
    <td>2</td> 
    <td>3</td> 
</tr> 
<tr> 
    <td>1</td> 
    <td>2</td> 
    <td>3</td> 
    <td>4</td> 
</tr> 
</table> 

想要的,正確的結果(所有節點被複制,但第二個<tr>的第一個<td>孩子除外)被生產出來:

<table> 
    <tr> 
     <td>1</td> 
     <td>2</td> 
     <td>3</td> 
    </tr> 
    <tr> 
     <td>2</td> 
     <td>3</td> 
     <td>4</td> 
    </tr> 
</table> 
+0

+1正確答案。 – 2011-02-27 21:27:29

+0

對於正確的建議+1。 – Flack 2011-02-27 22:12:18

相關問題