标签: xml

如何使用 XMLLINT 和 BASH 从 XML 文件解析命名空间

下面我有一个用于跟踪库存的 Adob​​e XML swidtag 示例。我需要在 bash 中使用 xmllint 解析出相关信息并将其输出到一个新的文本文件。

例如,我想解析以下内容

swid:entitlement_required_indicator
swid:product_title
swid:product_version
swid:name
swid:numeric
swid:major
swid:minor
swid:build
swid:review
Run Code Online (Sandbox Code Playgroud)

我试过使用它,但它不会让我读取命名空间

xmllint --xpath '//swid:product_version/swid:name/text()' file.xml
Run Code Online (Sandbox Code Playgroud)

我也试过

xmllint --xpath "//*[local-name1()='product_version']/*[local-name2()='name']/text()" file.xml
Run Code Online (Sandbox Code Playgroud)

但是得到了这些错误

xmlXPathCompOpEval: function local-nameame1 not found
XPath error : Unregistered function
XPath error : Stack usage errror
XPath evaluation failure
Run Code Online (Sandbox Code Playgroud)

Creative Suite 5 的示例标签文件 以下示例适用于序列化为 Creative Suite 5 Master Collection (Suite) 的 Adob​​e Photoshop CS5

<?xml version="1.0" encoding="utf-8"?>
<swid:software_identification_tag xsi:schemaLocation="http://standards.iso.org/iso/19770/-2/2008/schema.xsd software_identification_tag.xsd" 
     xmlns:swid="http://standards.iso.org/iso/19770/-2/2008/schema.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

<!--Mandatory Identity elements -->
<swid:entitlement_required_indicator>true</swid:entitlement_required_indicator>
<swid:product_title>Acrobat XI Pro</swid:product_title> …
Run Code Online (Sandbox Code Playgroud)

osx bash xml

9
推荐指数
2
解决办法
2万
查看次数

XML 命令行(shell 脚本)操作

如何在 shell 脚本中从命令行操作 XML?

有很多用于操作表格数据、替换环境变量或用正则表达式替换文本片段的命令,但我没有找到任何适用于 XML 的命令。

我的构建脚本需要在 xml 文档的主标签中插入一个带有内容的标签,我发现为此目的在 OS 中安装 java、perl 或 python 是一种矫枉过正(我的脚本是在带有 docker 图像的 gitlab 中完成的,所以这样做我使用 maven:3.5-jdk-8 图像中可用工具的工作将是一个梦想)。

我不想用 sed 操作 XML,尽管在我的构建脚本中它可以工作,因为它是evil

示例:我有以下 xml:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>  
  <!-- a lot of other tags-->
</project>  
Run Code Online (Sandbox Code Playgroud)

我想插入以下块:

<distributionManagement>
    <repository>
        <id>private-releases</id>
        <url>https://my.private.server.com/nexus/repository/maven-releases/</url>
    </repository>
</distributionManagement>
Run Code Online (Sandbox Code Playgroud)

在项目标签内(并且它是在开头还是结尾完全无关紧要。

xml shell-script docker

9
推荐指数
1
解决办法
4227
查看次数

如何按摩或格式化 html 以便用 xmstarlet 解析?

我是否首先需要html通过类似的东西在野外奔跑jsoup?不让它在人类意义上有效,可能会变成胡言乱语,但至少xmlstarlet可以处理文件?

最好寻找一个可以像这样安装和使用的 CLI:

massage foo.html > bar.xhtml

或者至少是这些方面的东西。

用例:

thufir@doge:~/.html$ 
thufir@doge:~/.html$ curl http://int.soccerway.com/  > soccer.html
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  188k    0  188k    0     0   313k      0 --:--:-- --:--:-- --:--:--  313k
thufir@doge:~/.html$ 
thufir@doge:~/.html$ xmlstarlet sel -t -v "/html/body/table/tr/td[1]" -n soccer.html 
soccer.html:70.13: xmlParseEntityRef: no name
if (this.$ && this.$.fn && this.$.fn.jquery) {
            ^
soccer.html:70.14: xmlParseEntityRef: no name
if (this.$ && this.$.fn …
Run Code Online (Sandbox Code Playgroud)

command-line xml text-processing html xmlstarlet

8
推荐指数
1
解决办法
698
查看次数

如何将 Openbox `rc.xml` 拆分为多个文件?

我不喜欢大文本配置文件。所以,我想将我的rc.xml文件拆分为多个文件:

rc.xml
rc.keyboard.xml
rc.mouse.xml
Run Code Online (Sandbox Code Playgroud)

openbox xml configuration files

7
推荐指数
1
解决办法
587
查看次数

为python安装'igraph'时如何解决“找不到-lxml2”错误?

在 Ubuntu 15.04 上,我尝试使用以下命令安装“igraph”:

pip install python-igraph
Run Code Online (Sandbox Code Playgroud)

为了,好吧,使用igraphpython 中的包来处理图形和东西。但是,安装失败并显示以下输出

/usr/bin/ld: cannot find -lxml2
/usr/bin/ld: cannot find -lz
collect2: error: ld returned 1 exit status
Makefile:2357: recipe for target 'libigraph.la' failed
make[3]: *** [libigraph.la] Error 1
make[3]: Leaving directory '/tmp/pip-build-8dtEwd/python-igraph/tmp/igraph.dZXTk4/igraph-0.7.1/src'
Makefile:1377: recipe for target 'all' failed
make[2]: *** [all] Error 2
make[2]: Leaving directory '/tmp/pip-build-8dtEwd/python-igraph/tmp/igraph.dZXTk4/igraph-0.7.1/src'
Makefile:480: recipe for target 'all-recursive' failed
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory '/tmp/pip-build-8dtEwd/python-igraph/tmp/igraph.dZXTk4/igraph-0.7.1'
Makefile:382: recipe for target 'all' failed
make: *** [all] …
Run Code Online (Sandbox Code Playgroud)

xml python software-installation

7
推荐指数
1
解决办法
9142
查看次数

如何就地对 XML 元素进行排序?

我正在尝试版本控制 IntelliJ IDEA 配置文件。这是一个小示例:

<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
  <component name="ChangeListManager">
    <ignored path="tilde.iws" />
    <ignored path=".idea/workspace.xml" />
    <ignored path=".idea/dataSources.local.xml" />
    <option name="EXCLUDED_CONVERTED_TO_IGNORED" value="true" />
    <option name="TRACKING_ENABLED" value="true" />
    <option name="SHOW_DIALOG" value="false" />
    <option name="HIGHLIGHT_CONFLICTS" value="true" />
    <option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
    <option name="LAST_RESOLUTION" value="IGNORE" />
  </component>
  <component name="ToolWindowManager">
    <frame x="1201" y="380" width="958" height="1179" extended-state="0" />
    <editor active="false" />
    <layout>
      <window_info id="TODO" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" show_stripe_button="true" weight="0.33" sideWeight="0.5" order="6" side_tool="false" content_ui="tabs" />
      <window_info id="Palette&#9;" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" …
Run Code Online (Sandbox Code Playgroud)

xml

7
推荐指数
1
解决办法
7374
查看次数

使用 sed 或 awk 在 XML 文件中搜索替换

所以我有一个任务,我必须通过 bash shell 脚本来操作 XML 文件。

以下是步骤:

  1. 查询 XML 文件以获取值。
  2. 获取该值并交叉引用它以从列表中查找新值。
  3. 用新值替换不同元素的值。

以下是删除了非必要信息的 XML 示例:

<fmreq:fileManagementRequestDetail xmlns:fmreq="http://foobar.com/filemanagement">
      <fmreq:property>
         <fmreq:name>form_category_cd</fmreq:name>
         <fmreq:value>Memos</fmreq:value>
      </fmreq:property>
      <fmreq:property>
         <fmreq:name>object_name</fmreq:name>
         <fmreq:value>Correspondence</fmreq:value>
      </fmreq:property>
</fmreq:fileManagementRequestDetail>
Run Code Online (Sandbox Code Playgroud)

我必须从 object_name 下的 value 元素中获取值,交叉引用它,然后用新值替换 form_category_cd value 元素下的值:

因此,如果 object_name -> value 是 Correspondence,那么 form_category_cd -> value 可能需要是 YYZ。

问题是,我只能使用我们服务器上可用的工具,因为我们的操作组限制我们使用手头的工具。这是一场争取更新 xmllint 然后被否决的斗争。我使用的版本不支持--xpath,相信我在美好的一天很难。此外,我可用的版本不支持命名空间,因此 xmllint 已出局。

我试过 sed,但它似乎不喜欢我的正则表达式,即使我尝试的每个测试器都工作正常。

正则表达式:

(<fmreq\:name>object_name<\/fmreq\:name>)(?:\n\s*)(<fmreq\:value>)(.*)(<\/fmreq\:value>)
Run Code Online (Sandbox Code Playgroud)

我需要获得第 3 组,但 ​​sed 不会返回它。相反,它返回 XML 文件的全部内容。

sed -e 's/\(<fmreq\:name>object_name<\/fmreq\:name>\)\(?:\n\s*\)\(<fmreq\:value>\)\(.*\)\(<\/fmreq\:value>\)/\3/' < c3.xml 
Run Code Online (Sandbox Code Playgroud)

我对 awk / gawk 不太熟悉,所以我也在努力弄清楚它们,但如果能找到解决方案,我会向他们开放。

很想有一个 awk / gawk 解决方案,只是为了让老板高兴,因为他是 awk 的老粉丝,但我会尽我所能,因为我很难过。

我再次必须使用手头的工具并且无法安装任何新的东西。

xml sed awk text-processing regular-expression

6
推荐指数
1
解决办法
2万
查看次数

$1 不适用于 sed

我有一堆包含 XML 标签的文件,例如:

<h> PIDAT <h> O

我需要删除<h>该行中第一个之后的所有内容,以便我可以得到:

<h>

为此,我正在使用

sed -i -e 's/(^<.*?>).+/$1/' *.conll

但似乎 sed 无法识别$1. (据我所知,$1应该删除组中未包含的所有内容)。有没有办法实现这一目标?如果您能指出我正确的方向,我将不胜感激。

PS:我在正则表达式应用程序上测试了这些表达式并且它们起作用了,但它在命令行中不起作用。

xml sed regular-expression

6
推荐指数
1
解决办法
6315
查看次数

读取 XML 文件并仅提取节点名称和结构

我需要审核 XML 文件结构并需要生成一个仅显示 DOM 树结构并省略值的报告。本质上,我只是节点名称,没有值。我尝试使用 xmllint 和 xmlstarlet,但不知道如何执行此操作。

有谁知道执行此操作的任何工具或上述工具的示例?

cat $filename.xml | xmlstarlet format -t 给了我我需要的东西,但我想省略所有的价值。

xml xmllint xmlstarlet

5
推荐指数
2
解决办法
367
查看次数

删除大文件中的 XML 标记

我很难解析一个巨大的 XML 文件(大约 100GB,带有大节点)。我正在尝试通过删除不必要的标签来减小节点大小。例如,任何<text>标签。

如果我使用本机 XML 解析器,例如xmlstarlet

xmlstarlet ed -P -d '//text' file.xml
Run Code Online (Sandbox Code Playgroud)

我面临同样的问题,即内存不足。

是否有一种安全的方法(内存占用很少)来删除所有<text></text>对而不破坏 XML 结构?

xml text-processing xmlstarlet

5
推荐指数
2
解决办法
1352
查看次数