Linux命令行上的xpath查询

时间:2014-06-10 11:50:55

标签: xml xpath xpath-2.0 xml-libxml

我正在尝试对堆栈交换数据使用xpath查询。 xml文件具有以下结构。

<posts>
    <row Id="2" PostTypeId="1" Body="some text goes here" ..... />
</posts>

根据数据,该行具有以下属性。它没有任何文字。

   - 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

我想使用xpath查询查询此xml文档。例如,/ posts / row [@ PostTypeId =“1”] / @ Body。那就是提取PostTypeId =“1”(问题)的所有主体。我使用工具http://www.xmlme.com/XpathTool.aspx尝试了上述查询。它按预期从xml文档中检索类型问题的Body。

然而,我尝试使用以下方法在ubuntu中进行尝试。

  1. libxml-xpath-perl - 我执行了xpath -e“/ posts / row [@PostTypeId = \”1 \“] / @ Body”posts.xml。它不是单独提取Body属性。相反,它会转储整个行元素。
  2. 我自己用lxml.etree编写了一个python脚本。代码如下。

    tree = etree.parse(input file) print (tree.xpath(xpathexpression))

  3. 我用上面类似的命令行调用了上面的python脚本。它说没有找到匹配的节点。 3. libxml2-utils - 尝试过xmllint --pattern“/ posts / row [@PostTypeId = \”1 \“] / @ Body”posts.xml。它还抱怨说找不到匹配的节点。

    鉴于xpath查询适用于在线工具,但它不能在命令行上运行,我很谦虚地认为在命令行上输入xpath查询需要特别考虑。在ubuntu上使用bash脚本中的命令行工具时,给出了什么是正确的xpath查询?

0 个答案:

没有答案