Gab*_*abe 42 regex xpath attributes
全部 -
为了破解这个问题,我已经搜索并修整了几个小时,但我仍然遇到问题.我有以下XML数据:
<game id="2009/05/02/arimlb-milmlb-1" pk="244539">
<team id="109" name="Arizona" home_team="false">
<event number="9" inning="1" description="Felipe Lopez doubles to left fielder Chris Duffy. "/>
<event number="15" inning="1" description="Augie Ojeda flies out to center fielder Mike Cameron. "/>
<event number="23" inning="1" description="Chad Tracy doubles to right fielder Joe Sanchez. "/>
<event number="52" inning="2" description="Mark Reynolds lines out to left fielder Chris Duffy. "/>
<!-- more data here -->
</team>
</game>
Run Code Online (Sandbox Code Playgroud)
我试图在description属性的值中获取包含文本"double"的事件节点的总数.这是我到目前为止所尝试的,无济于事(irb抛出错误):
"/game/team/event/@description[matches(.,' doubles ')]"
Run Code Online (Sandbox Code Playgroud)
因为我只是想匹配description属性值的一个片段,所以可以使用XPath 2.0函数'匹配',对吗?如果是这样,我做错了什么?
在此先感谢您的帮助!
Dim*_*hev 35
我试图在description属性的值中获取包含文本"double"的事件节点的总数.
matches()是标准的XPath 2.0功能.它在XPath 1.0中不可用.
你可以使用:
count(/*/*/event[contains(@description, ' doubles ')])
Run Code Online (Sandbox Code Playgroud)
为了验证这一点,这里是一个小的XSLT转换,它只输出在提供的XML文档上评估上述XPath表达式的结果:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:template match="/">
<xsl:value-of select=
"count(/*/*/event[contains(@description, ' doubles ')])"/>
</xsl:template>
</xsl:stylesheet>
Run Code Online (Sandbox Code Playgroud)
当此转换应用于提供的XML文档时:
<game id="2009/05/02/arimlb-milmlb-1" pk="244539">
<team id="109" name="Arizona" home_team="false">
<event number="9" inning="1" description="Felipe Lopez doubles to left fielder Chris Duffy. "/>
<event number="15" inning="1" description="Augie Ojeda flies out to center fielder Mike Cameron. "/>
<event number="23" inning="1" description="Chad Tracy doubles to right fielder Joe Sanchez. "/>
<event number="52" inning="2" description="Mark Reynolds lines out to left fielder Chris Duffy. "/>
<!-- more data here -->
</team>
</game>
Run Code Online (Sandbox Code Playgroud)
产生了想要的正确结果:
2
Run Code Online (Sandbox Code Playgroud)
请尝试以下变体:
/game/team/event[matches(@description, ' doubles ')]/@description
/game/team/event[matches(@description, '^.*?doubles.*$')]/@description
/game/team/event[contains(@description, ' doubles ')]/@description
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
77674 次 |
| 最近记录: |