这是我的xml,
<w:tc>
<w:p>
<w:pPr></w:pPr>
<w:r></w:r>
</w:p>
</w:tc>
<w:tc>
<w:p>
<w:pPr></w:pPr>
</w:p>
</w:tc>
我想匹配w:p,其前面是w:tc并且没有跟随兄弟w:r,正好我想要第二个w:tc。编码我试过的,
<xsl:template match="w:pPr[ancestor::w:p[ancestor::w:tc] and not(following-sibling::w:r)]">
我需要x路径为w:pPr没有后续兄弟
答案 0 :(得分:3)
问题是w:pPr后跟w:超链接。现在我也忽略了w:超链接。
如果你想匹配一个没有以下兄弟元素的w:pPr
(无论名字如何),那么只需使用match
模式
w:pPr[ancestor::w:p[ancestor::w:tc] and not(following-sibling::*)]
或等效(并略短)
w:tc//w:p//w:pPr[not(following-sibling::*)]
答案 1 :(得分:2)
使用XPath简单明了,你必须过滤元素olny。您的filtring可以基于元素的内容(使用[]
和括号内的路径)。使用过滤后的元素,您可以像使用XML树一样工作(再次开始过滤或选择最终元素)。
在您的情况下,首先您必须选择正确的tc
元素(根据需要过滤元素):
//tc[count(./p/*) = 1]
或r
元素://tc[not(./p/r)]
或r
和hyperlink
元素://tc[not(./p/r) and not(./p/hyperlink)]
pPr
和不存在的r
(由于pPr
已在第二步中过滤,因此不是必需的)://tc[./p/r and not(./p/r)]
它返回以下XML。
<tc>
<p>
<pPr>pPr</pPr>
</p>
</tc>
然后只是简单地说出你想从新XML中得到什么:
pPr
元素吗?使用:/p/pPr
所有在一起:
//tc[count(./p/*) = 1]/p/pPr
或
//tc[not(./p/r)]/p/pPr
注意://
表示在文档中的任意位置找到该元素。
更新1 :添加了超链接条件。