Xml xpath:连接同级节点文本
给定示例XML数据:Xml xpath:连接同级节点文本,xml,xpath,Xml,Xpath,给定示例XML数据: <root> <a> <id>1</id> <status>on</status> <level>4</level> <otherData>asdfasdfsdfvasdF</otherData> <b> <name>A1</name> </b&g
<root>
<a>
<id>1</id>
<status>on</status>
<level>4</level>
<otherData>asdfasdfsdfvasdF</otherData>
<b>
<name>A1</name>
</b>
</a>
<a>
<id>2</id>
<status>on</status>
<level>8</level>
<otherData>asdfasdfsdfvasdF</otherData>
<b>
<name>TEST</name>
</b>
</a>
<a>
<id>3</id>
<status>off</status>
<level>2</level>
<otherData>asdfasdfsdfvasdF</otherData>
<b>
<name>A1</name>
</b>
</a>
</root>
这里尝试将id
与它的同级状态
连接起来,但这不起作用
//name[text()="A1"]/../../concat(id/text() , status/text())
我想做的事可能吗?如果是这样,正确的XPath表达式是什么
澄清一下:我没有对这个表达式进行任何转换,我只是将它插入XPath表达式计算器(例如在Notepad++或JEdit-via插件中),以帮助调试非常大的XML文件中的细微数据错误。在本例中,如果
b
子元素具有name=“A1”
,则id
和status
的某些组合可能不正确,因此我尝试使用一个简单的表达式来查找它们,而不是手动滚动文件。试试这个。您只需添加所需的格式)
XPath 2.0:
for $n in /root/a[b/name[.='A1']] return concat($n/id, ' ' , $n/status)
结果:
1 on
3 off
在中测试,这是一个非常好的工具IMHO。对不起,我应该说得更清楚:我不是在样式表中这样做的,我用它来调试有细微数据错误的大型XML文件。嗯。。。我用于Notepad++的插件似乎不支持XPath 2.0,JEdit插件也不支持(它们都给了我“非法令牌”类型的错误)。您可以推荐哪些好的工具/编辑器来评估这一点?如果可能的话,也可以在Xpath 1.x中实现这一点。Oxygen看起来是一个非常灵活的工具,但我不需要它的大部分功能,而且我认为我无法获得这些许可证的预算。这正是我在工作站上调试和更正XML文件所需要的,直到几周后修复程序投入生产。我还没有测试过这个插件,它使用的是旧版本的Saxon(Saxon 7),但它可能还是有用的。啊哈,我让它工作了,但我必须安装Saxon插件来支持XPath 2.0。
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl"
>
<xsl:template match="root">
<xsl:apply-templates select="//name[text()='A1']"></xsl:apply-templates>
</xsl:template>
<xsl:template match="name[text()='A1']">
<xsl:value-of select="../../id"/>
<xsl:text> </xsl:text>
<xsl:value-of select="../../status"/>
</xsl:template>
</xsl:stylesheet>
for $n in /root/a[b/name[.='A1']] return concat($n/id, ' ' , $n/status)
1 on
3 off