2011-02-27 123 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

相关问题