Xml Linux命令行上的xpath查询
我正在尝试对堆栈交换数据使用xpath查询。xml文件具有以下结构Xml Linux命令行上的xpath查询,xml,xpath,xpath-2.0,xml-libxml,Xml,Xpath,Xpath 2.0,Xml Libxml,我正在尝试对堆栈交换数据使用xpath查询。xml文件具有以下结构 <posts> <row Id="2" PostTypeId="1" Body="some text goes here" ..... /> </posts> 我想使用xpath查询来查询这个xml文档。例如,/posts/row[@PostTypeId=1]/@Body。即提取所有PostTypeId=1问题的正文。我使用该工具尝试了上述查询。它可以从xml文档中检索类型问题的主体
<posts>
<row Id="2" PostTypeId="1" Body="some text goes here" ..... />
</posts>
我想使用xpath查询来查询这个xml文档。例如,/posts/row[@PostTypeId=1]/@Body。即提取所有PostTypeId=1问题的正文。我使用该工具尝试了上述查询。它可以从xml文档中检索类型问题的主体
然而,我尝试在ubuntu中使用以下方法
libxml xpath perl-I执行xpath-e/posts/row[@PostTypeId=\1\]/@Body posts.xml。它不是单独提取Body属性。而是将整个行元素转储到行元素中。
我自己使用lxml.etree编写了一个python脚本。代码如下
tree=etree.parseinput文件
print tree.xpathxpression
我使用上面类似的命令行调用了上面的python脚本。它说没有找到匹配的节点。
3.libxml2 utils-trued xmllint-pattern/posts/row[@PostTypeId=\1\]/@Body posts.xml。它还抱怨说没有找到匹配的节点
鉴于xpath查询可以在在线工具上运行,但不能在命令行上运行,我认为在命令行上输入xpath查询需要特别考虑。在ubuntu上使用bash脚本中的命令行工具时,正确的xpath查询是什么?您的输入XML有名称空间吗?没有。没有名称空间。您确定上下文是/posts吗?不可能重现你的错误。您提供的示例工作正常。也许您可以包含一个不起作用的源代码的更完整示例。请注意,虽然您已将此问题标记为xpath-2.0,但您尝试的工具都限于xpath 1.0,尽管您的示例路径对这两个版本都有效。
- Id
- PostTypeId
- 1: Question
- 2: Answer
- ParentID (only present if PostTypeId is 2)
- AcceptedAnswerId (only present if PostTypeId is 1)
- CreationDate
- Score
- ViewCount
- Body
- OwnerUserId
- LastEditorUserId
- LastEditorDisplayName="Jeff Atwood"
- LastEditDate="2009-03-05T22:28:34.823"
- LastActivityDate="2009-03-11T12:51:01.480"
- CommunityOwnedDate="2009-03-11T12:51:01.480"
- ClosedDate="2009-03-11T12:51:01.480"
- Title=
- Tags=
- AnswerCount
- CommentCount
- FavoriteCount