- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我有以下 HTML 代码:
<textarea name="command" class="setting-input fixed-width" rows="9">1</textarea><textarea name="command" class="setting-input fixed-width" rows="5">2</textarea>
我想解析它以接收这样的输出:
1
2
目前我正在使用:
xmllint --xpath '//textarea[@name="command"]/text()' --html
但它不会在每次匹配后附加换行符。
最佳答案
2020 年你好!
自 libxml v2.9.9 起,此行为 has been fixed in xmllint
itself .
但是,如果您使用的是比这更早的版本,并且不想从源代码构建 libxml 只是为了获得固定的 xmllint
,您将需要此处的其他解决方法之一。在撰写本文时,例如,最新的 CentOS 8 仍在使用 libxml (2.9.7) 版本,其行为与 OP 描述的方式相同。
正如我从 this SO answer 收集到的, 理论上可以将命令输入 --shell
xmllint
的旧版 (<2.9.9) 选项,这将在单独的行上生成每个节点。但是,您最终不得不使用 sed
对其进行后处理。或 grep
删除 shell 模式(面向人的)输出的视觉碎屑。这并不理想。
XMLStarlet ,如果可用,提供另一种解决方案,但您确实需要使用 xmlstarlet fo
在使用 xmlstarlet sel
之前将您的 HTML 片段格式化为有效的 XML提取节点:
echo '
<textarea name="command" class="setting-input fixed-width"
rows="9">1</textarea>
<textarea name="command" class="setting-input fixed-width"
rows="5">2</textarea>' \
| xmlstarlet fo -H -R \
| xmlstarlet sel -T -t -v '//textarea[@name="command"]' -n
如果Attempt to load network entity
来自第二个的消息 xmlstarlet
调用惹恼了你,只需添加 2>/dev/null
在最后抑制它(冒着抑制打印到标准错误的其他消息的风险)。
XMLStarlet 选项解释(另见 user's guide):
fo -H -R
— 格式化输出,期望 HTML 输入,并尽可能多地恢复错误输入
<html>
根节点,使 OP 示例中的片段有效 XMLsel -T -t -v //xpath -n
— 选择基于 XPath 的节点 //xpath
-T
)而不是 XML-t
) 返回节点的值 (-v
) 而不是节点本身(允许您放弃在 XPath 表达式中使用 text()
)-n
)编辑:删除了半实现的 xmllint --shell
解决方案,因为它很糟糕。添加了一个实际处理 OP 数据的 XMLStarlet 示例。
关于xml - 如何使用 xmllint --xpath 在每次匹配后附加换行符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18532948/
我不想创建 XML 文件 我需要使用 --shell 和 cat 来创建过滤器 我的 xmllint 版本中没有 xpath,使用 libxml2-2.7.6-14.el6.x86_64 xml|xm
我在使用 gtkmm-3.0 编写 C++ 时尝试运行以下命令,方法是遵循 example : glib-compile-resources --target=resources.c --genera
这个问题在这里已经有了答案: Difference between single and double quotes in Bash (7 个答案) 关闭 7 年前。 在 bash shell 提示
我正在使用 xmllint Linux 命令 ( xmllint description ),我想捕获错误代码以在脚本中使用它。我该怎么做? 谢谢 最佳答案 你可以这样做: if xmllint --
我阅读了许多有关类似问题的xmllint答案,但似乎都不适用于我的特定情况(也许我错过了)。无论如何,我有以下XML: Name 1 3 Name 2
我知道我的问题包括2个问题... 起初,我想用xmllint输出“loc”内容标签。我加载的站点地图有一个 xmlns="..."。 在 xmllint shell 上,我需要这样做: setroot
尝试验证 XML 文档;但是,xmllint 坚持将选项作为文件读取,因此我遇到了 FileNotFound 异常。只是为了确认,我在与我的 XML 文件相同的文件夹中有 xmllint.exe。我在
默认情况下 xmllint 似乎缩进 2 个空格,有没有办法更改 Windows 上的缩进级别? 最佳答案 我认为您需要将环境变量 $XMLLINT_INDENT 设置为您需要的任何值(例如,如果您想
我需要帮助从这个网站安装 xmllint:http://xmlsoft.org/sources/win32/ 特别是,我不确定我应该下载哪个文件 - 当我单击预编译 Windows 二进制文件的链接时
我做错了什么?运行以下命令时,我得到 XPath set is empty。xmllint --xpath './/PackageReference[@Include="Tips"]/Version/
这个问题在这里已经有了答案: xmllint failing to properly query with xpath (3 个回答) 12 个月前关闭。 问题> 我有一些从存储在 get_build
我正在尝试使用 xmllint 从 xml 文档中提取值。但是 xml 的结构方式如下。 hive.exec.reducers.max 999 max nu
我有一个像这样的 XML 文档: 如何在 xmllint 中使用 ex: CP_09550 的 name 参数获取 id 值? 谢谢 最佳答案 要获取值,将 XPath 表达式包
我得到了 python 2.6,它有一个旧版本的 toprettyxml() ,它不能按预期进行 xml 格式化。因此我尝试使用子进程调用 xmllint。这是我的简化代码。 xmlPar
我在 bash 脚本中使用 xmllint 对某些数据执行 xpath。 xpath 并不总是与数据匹配,这没关系。来自 xmllint 文档: --xpath "XPath_expression"
以下代码行适用于我的数据库服务器 (unix) xmllint --noout CI_PRD_TESTING.XML 但在 shell 脚本中同样不起作用 #!/bin/bash export FOO
我正在尝试提取包含指定标记的 XML 文件的所有部分。我在网上搜索了一下,发现这个很管用。 xmllint --xpath "/all/string(//title)" 但是它只返回第一个结果,我怎样
考虑文件 example.html 中的以下 HTML 代码 link1content link2more contend
我有下面的 XML 并且想提取最后一个版本元素的值 org.continuous.Integration Continuous-Integration 1.11
我正在尝试验证此 XML 文档: Alice Bob 针对以下 DTD: 运行xmllint --dtdvalid test.dt
我是一名优秀的程序员,十分优秀!