gpt4 book ai didi

linux - bash:获取一对 XML 标签之间的内容并将它们分别存储到多个文件中

转载 作者:太空宇宙 更新时间:2023-11-04 05:15:55 25 4
gpt4 key购买 nike

我有一个如下所示的 .xml 文件,

下面还有一千行

<note>------------------------------------------+
<to>Tove</to> |
<from>Jani</from> |
<heading>Reminder</heading> |--> To 1.xml
<body>Don't forget me this weekend!</body> |
</note>-----------------------------------------+
<note>------------------------------------------+
<to>Tove</to> |
<from>Jani</from> |
<heading>Reminder</heading> |--> To 2.xml
<body>Don't forget me this weekend!</body> |
</note>-----------------------------------------+
<note>------------------------------------------+
<to>Tove</to> |
<from>Jani</from> |
<heading>Reminder</heading> |--> To 3.xml
<body>Don't forget me this weekend!</body> |
</note>-----------------------------------------+

这里我尝试将数据从 到 分离并将数据移动到多个文件

我尝试了下面的代码,但它正在获取第一部分,我无法移动第二部分和第三部分等。

 sed -En 'H;$!d
g;s/.*[\n](.*<note>.*\n.*<note>[^\n]*).*/\1/p
' sample.xml > 1.xml

请帮我解决这个问题。

提前致谢...

最佳答案

不要使用正则表达式,也不要使用 sed,而是使用适当的 XML/HTML 解析器和强大的 查询:

for i in {1..3}; do
xmllint --xpath "//note[$i]" file > $i.xml
done

理论:

根据编译原理,基于 finite state machine 的正则表达式无法解析 HTML 。由于 HTML 的分层结构,您需要使用 pushdown automaton和操纵LALR使用 YACC 等工具的语法.

realLife©®™ 日常工具 :

您可以使用以下其中一项:

xmllint通常默认与 libxml2、xpath1 一起安装(检查 my wrapper 以换行符分隔输出

xmlstarlet可以编辑、选择、转换...默认不安装,xpath1

xpath通过 perl 的模块 XML::XPath, xpath1 安装

xidel xpath3

saxon-lint我自己的项目,@Michael Kay 的 Saxon-HE Java 库 xpath3 的包装器

或者你可以使用高级语言和适当的库,我认为:

lxml (从 lxml 导入 etree)

XML::LibXML , XML::XPath , XML::Twig::XPath , HTML::TreeBuilder::XPath

, check this example

DOMXpathcheck this example

<小时/>

检查:Using regular expressions with HTML tags

关于linux - bash:获取一对 XML 标签之间的内容并将它们分别存储到多个文件中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49500211/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com