我试图让以下工作,但唉它没有返回预期的结果。虽然类似于我在限制为xpath 1.0之前受到限制的问题。
我希望使用xpath来获取“subtitle”节点内的第一个文本节点。 XML如下:
<topic class="coverPage">
<subtitle id="IDb2907ca1-51fe-472e-bf99-246126937eab">
<xt:delText xt:action="start" xt:author="James Doherty" xt:dateTime="2016-01-27T17:07:00" xt:id="fb72fba6-f502-422e-9e91-1731ed007e98"/>
Ignore
<xt:delText xt:action="end" xt:id="fb72fba6-f502-422e-9e91-1731ed007e98"/>
Sub-title
<xt:insText xt:action="start" xt:author="James Doherty" xt:dateTime="2016-01-27T14:55:00" xt:id="44ac82c2-acfc-4721-b962-20ac2b18d9f3"/>
Insert Additional Text
<xt:insText xt:action="end" xt:id="44ac82c2-acfc-4721-b962-20ac2b18d9f3"/>
Extra Text
</subtitle>
</topic>
下面还提供了替代XML:
<topic class="coverPage">
Sub-title
<subtitle id="IDb2907ca1-51fe-472e-bf99-246126937eab">
<xt:delText xt:action="start" xt:author="James Doherty" xt:dateTime="2016-01-27T17:07:00" xt:id="fb72fba6-f502-422e-9e91-1731ed007e98"/>
Ignore
<xt:delText xt:action="end" xt:id="fb72fba6-f502-422e-9e91-1731ed007e98"/>
<xt:insText xt:action="start" xt:author="James Doherty" xt:dateTime="2016-01-27T14:55:00" xt:id="44ac82c2-acfc-4721-b962-20ac2b18d9f3"/>
Insert Additional Text
<xt:insText xt:action="end" xt:id="44ac82c2-acfc-4721-b962-20ac2b18d9f3"/>
Extra Text
</subtitle>
</topic>
我尝试过以下但没有运气:
/topic[@class='coverPage']/*[local-name()='subtitle']/text()[1]|/topic[@class='coverPage']/*[local-name()='subtitle']/*[substring(local-name(), string-length(local-name())-string-length('Text')+1)='Text'][@*[local-name()='action']='end'][1]/following-sibling::text()[1]
我认为问题在于属性值“action”并且它具有命名空间。预期结果将是“小标题”。关于如何让它发挥作用的任何想法?
答案 0 :(得分:0)
XML缺少xml命名空间定义,正如@KeithHall在OP的评论中所指出的那样。
<topic class="coverPage" "xmlns:xt="http://stackoverflow.com/questions/35063599/xpath-filter-attribute-with-namespace">
<subtitle id="IDb2907ca1-51fe-472e-bf99-246126937eab">
<xt:delText xt:action="start" xt:author="James Doherty" xt:dateTime="2016-01-27T17:07:00" xt:id="fb72fba6-f502-422e-9e91-1731ed007e98"/>
Ignore
<xt:delText xt:action="end" xt:id="fb72fba6-f502-422e-9e91-1731ed007e98"/>
Sub-title
<xt:insText xt:action="start" xt:author="James Doherty" xt:dateTime="2016-01-27T14:55:00" xt:id="44ac82c2-acfc-4721-b962-20ac2b18d9f3"/>
Insert Additional Text
<xt:insText xt:action="end" xt:id="44ac82c2-acfc-4721-b962-20ac2b18d9f3"/>
Extra Text
</subtitle>
</topic>
要根据属性值过滤XML,使用命名空间,将使用以下xpath:
[@*[local-name()='action']='end']
实现预期结果的完整xpath低于OP。
/topic[@class='coverPage']/*[local-name()='subtitle']/text()[1]|/topic[@class='coverPage']/*[local-name()='subtitle']/*[substring(local-name(), string-length(local-name())-string-length('Text')+1)='Text'][@*[local-name()='action']='end'][1]/following-sibling::text()[1]