当前位置: 首页 > 知识库问答 >
问题:

基于关键字从xml中提取节点

计胤
2023-03-14

我有一个如下所示的XML,正在尝试基于关键字提取节点。尝试使用XPath和XMLLint。但很明显,我做得不对。希望能在这方面有所帮助。

XML文件

  <section>
    <h>2 Introduction</h1>
    <region>Intro 1</region>
    <region>Background</region>
  </section>
<article>
 <body>
  <section>
    <h1>2 Task objectives</h1>
    <region>2.1 Primary objectives </region>
    <region>2.</region>
  </section>

  <section>
    <h2>Requirements</h1>
    <region>System Requirements </region>
    <region>Technical Requirements</region>
  </section>

  <section>
    <h3>Design</h1>
    <region>Design methodology </region>
    <region>Design patterns</region>
  </section>
  </body>
</article>

给定此XML和关键字任务目标(不区分大小写),我需要提取整个节点并写入另一个XML文件

<section>
    <h1>2 Task objectives</h1>
    <region>2.1 Primary objectives </region>
    <region>2.</region>
</section>

我尝试使用Xpath和XMllint进行提取。

 $ xmllint --xpath //body//section//h1[.="Task objectives"] Prior.mod.xml
 XPath error : Invalid predicate
//body//section//h1[.=Task objectives]
                  ^
xmlXPathEval: evaluation failed
XPath evaluation failure

有谁能告诉我上面的问题是什么,我如何解决?此外,我想在文件目录的shell中执行此操作。XMLlint是最佳选择吗?

共有2个答案

程智明
2023-03-14

这适用于XPath 1.0:

//section[contains(
  translate(h1, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz'),
  'task objectives')
]
白智
2023-03-14

shell在命令行解析期间删除引号(")字符——您需要引用整个表达式,如

xmllint --xpath '//body//section//h1[.="Task objectives"]' Prior.mod.xml

示例:

$ xmllint --xpath //body//section//h1[.="Task objectives"] -
<body>
<section>
<h1>Task objectives</h1>
<h1>abcd</h1>
</section>
</body>
^D

导致:

XPath error : Invalid predicate
//body//section//h1[.=Task objectives]
                           ^
xmlXPathEval: evaluation failed
XPath evaluation failure

注意缺少的引号。然后我试着

$ xmllint --xpath '//body//section//h1[.="Task objectives"]' -
<body>
<section>
<h1>Task objectives</h1>
<h1>abcd</h1>
</section>
</body>
^D

产生了输出

<h1>Task objectives</h1>
 类似资料:
  • 问题内容: 我正在寻找Java库以从文本块中提取关键字。 该过程应如下所示: 停止单词清洗->词干->根据英语语言统计信息搜索关键字-意味着单词在单词中出现的次数比在英语中出现的次数多于候选单词。 是否有执行此任务的库? 问题答案: 这是使用ApacheLucene的可能解决方案。我没有使用最新版本,但使用3.6.2版本,因为这是我所知道的最好的版本。除了之外,别忘了将下载的存档中的添加到您的项目

  • 我正在尝试处理这个XML文件,我想根据最新的节点值删除所有匹配的节点。在以下示例中,最新节点值为“${DELETE}”,最新节点值将始终为“${DELETE}”,并且该节点将始终位于XML文件的底部。 示例: 预期产出为:

  • 问题内容: 我想在API中提供自动字符串格式,例如: 可以替换为格式化字符串中标注的属性值。 如何从Python格式字符串中提取关键字参数: 问题答案: 您可以使用类的一个字符串,解析出的领域,与方法: 演示: 您可以进一步解析这些字段名称。为此,您可以使用方法(Python 2)/函数(Python 3)(此内部实现细节未公开;在内部使用)。此函数返回名称的 第一部分 ,将在传递给的参数中查找该

  • 对于下面的XML,我正在尝试根据属性和节点值提取节点。 基于属性class=pass和h1包含('objectives'),我试图提取以下输出。 “目标”是节点值字符串“1任务目标”的一部分 1任务目标1目标2 下面是我正在尝试的XPath表达式。然而,这并没有产生任何输出。你能指出我做错了什么吗? 谢谢

  • Q非常业余的程序员在这里,寻求你的帮助。 我必须经常编辑这样的xml文件 使用一个相当复杂的正则表达式搜索和替换过程,我只能提取标记属性的值。(这就是我所关心的)。 但是这很耗时,而且在Python中必须有非常简单的方法来查找属性标记="SOME_TEXT"部分并将所有值放入一个数组中,然后打印出该数组(到文件中)。但是我无法弄清楚:( 我正在寻找一种不包括导入任何类型的XML库的方法,因为我想让

  • 问题内容: 我有一个网页,可以用来上传文件。 现在,我需要检查文件类型是否正确(zip,jpg,pdf,…)。 我可以使用请求随附的mimeType,但我不信任用户,并且说我想确保没有人能够上传在.jpg中重命名的.gif文件。 我认为在这种情况下,我应该检查魔术号码。我发现 这是一个Java库,似乎可以实现“从魔术数字中提取模仿类型”的功能。 这是正确的解决方案还是您建议什么? 更新: 我已经找