标签: xml

如何在包含“”的字符串中插入变量?

我想通过插入变量来构造一个 xml 字符串:

str1="Hello"
str2="world"

xml='<?xml version="1.0" encoding="iso-8859-1"?><tag1>$str1</tag1><tag2>$str2</tag2>'

echo $xml
Run Code Online (Sandbox Code Playgroud)

结果应该是

<?xml version="1.0" encoding="iso-8859-1"?><tag1>Hello</tag1><tag2>world</tag2>
Run Code Online (Sandbox Code Playgroud)

但我得到的是:

<?xml version="1.0" encoding="iso-8859-1"?><tag1>$str1</tag1><tag2>$str2</tag2>
Run Code Online (Sandbox Code Playgroud)

我也试过

xml="<?xml version="1.0" encoding="iso-8859-1"?><tag1>$str1</tag1><tag2>$str2</tag2>"
Run Code Online (Sandbox Code Playgroud)

但这会删除内部双引号并给出:

<?xml version=1.0 encoding=iso-8859-1?><tag1>hello</tag1><tag2>world</tag2>
Run Code Online (Sandbox Code Playgroud)

shell bash xml variable

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

Vim:使 XML 文本“漂亮”

是否有一种简单的方法vi可以使您的 XML 文本“漂亮”?

例如:

我要这个..

            <person>
  <name>Nick</name>
 <age>26</age>
         <gender>male</gender>
<occupation>doctor</occupation>
    </person>
Run Code Online (Sandbox Code Playgroud)

成为这个...

<person>
    <name>Nick</name>
    <age>26</age>
    <gender>male</gender>
    <occupation>doctor</occupation>
</person>
Run Code Online (Sandbox Code Playgroud)

vim editors xml vi text-processing

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

解析 XML 以获取 bash 脚本中的节点值?

我想知道如何通过以下路径获取节点的值:

config/global/resources/default_setup/connection/host
config/global/resources/default_setup/connection/username
config/global/resources/default_setup/connection/password
config/global/resources/default_setup/connection/dbname
Run Code Online (Sandbox Code Playgroud)

来自以下 XML:

<?xml version="1.0"?>
<config>
    <global>
        <install>
            <date><![CDATA[Tue, 11 Dec 2012 12:31:25 +0000]]></date>
        </install>
        <crypt>
            <key><![CDATA[70e75d7969b900b696785f2f81ecb430]]></key>
        </crypt>
        <disable_local_modules>false</disable_local_modules>
        <resources>
            <db>
                <table_prefix><![CDATA[]]></table_prefix>
            </db>
            <default_setup>
                <connection>
                    <host><![CDATA[localhost]]></host>
                    <username><![CDATA[root]]></username>
                    <password><![CDATA[pass123]]></password>
                    <dbname><![CDATA[testdb]]></dbname>
                    <initStatements><![CDATA[SET NAMES utf8]]></initStatements>
                    <model><![CDATA[mysql4]]></model>
                    <type><![CDATA[pdo_mysql]]></type>
                    <pdoType><![CDATA[]]></pdoType>
                    <active>1</active>
                </connection>
            </default_setup>
        </resources>
        <session_save><![CDATA[files]]></session_save>
    </global>
    <admin>
        <routers>
            <adminhtml>
                <args>
                    <frontName><![CDATA[admin]]></frontName>
                </args>
            </adminhtml>
        </routers>
    </admin>
</config>
Run Code Online (Sandbox Code Playgroud)

我还想将该值分配给变量以供进一步使用。让我知道你的想法。

command-line xml text-processing xmllint

24
推荐指数
3
解决办法
15万
查看次数

VIM 从一个 xml 标签跳转到最后一个

是否有快捷方式可以从 跳转,例如跳转<XX></XX>

我已经尝试使用 '%' ,但它不适用于这种情况。

vim xml

23
推荐指数
2
解决办法
8768
查看次数

如何使用patch和diff合并两个文件并自动解决冲突

我已经阅读了 diff 和 patch,但我不知道如何应用我需要的东西。我想它很简单,所以为了显示我的问题,请使用这两个文件:

一个.xml

<resources>
   <color name="same_in_b">#AAABBB</color>
   <color name="not_in_b">#AAAAAA</color>
   <color name="in_b_but_different_val">#AAAAAA</color>
   <color name="not_in_b_too">#AAAAAA</color>
</resources>
Run Code Online (Sandbox Code Playgroud)

xml文件

<resources>
   <color name="same_in_b">#AAABBB</color>
   <color name="in_b_but_different_val">#BBBBBB</color>
   <color name="not_in_a">#AAAAAA</color>
</resources>
Run Code Online (Sandbox Code Playgroud)

我想要一个输出,看起来像这样(顺序无关紧要):

<resources>
   <color name="same_in_b">#AAABBB</color>
   <color name="not_in_b">#AAAAAA</color>
   <color name="in_b_but_different_val">#BBBBBB</color>
   <color name="not_in_b_too">#AAAAAA</color>
   <color name="not_in_a">#AAAAAA</color>
</resources>
Run Code Online (Sandbox Code Playgroud)

合并应包含符合此简单规则的所有行:

  1. 仅在其中一个文件中的任何行
  2. 如果一行具有相同的名称标签但具有不同的值,则从第二个中获取值

我想在 bash 脚本中应用这个任务,所以如果另一个程序更适合,它不一定需要完成差异和补丁

xml diff patch text-processing merge

23
推荐指数
3
解决办法
4万
查看次数

用 sed 替换文本并保留原始文本的一部分

我正在尝试转换

<id>1</id>
<Name>ENTERPRISE RESOURCE PLANNING</Name>
Run Code Online (Sandbox Code Playgroud)

到:

<column name="id">1</column>
<column name="Name">ENTERPRISE RESOURCE PLANNING</column>
Run Code Online (Sandbox Code Playgroud)

我假设这项工作的最佳工具是sed,但是我无法弄清楚如何将原始文本的一部分保留在替换部分中。

如果我做:

$ sed -i 's/<.*>.*<.*>/<column name="\\1">\\2<\/column>/g' filename.xml
Run Code Online (Sandbox Code Playgroud)

输出是:

<column name="\1">\2</column>
<column name="\1">\2</column>
Run Code Online (Sandbox Code Playgroud)

或者从 inside 做类似的事情vi,它输出:

<column name=""></column>
<column name=""></column>
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点,\1并被\2替换回它们的原始值?

xml sed regular-expression

22
推荐指数
1
解决办法
3万
查看次数

重新格式化大量 XML 文件

我正在处理分散在嵌套目录结构中的大量 XML 文件。

我尝试了以下方法:

$ find . -name "*.xml" -type f | xargs -- xmllint --format
Run Code Online (Sandbox Code Playgroud)

问题是在屏幕上生成格式化的 XML 输出,但不会更改文件。

如何更改此命令以更改实际文件内容?

xml find xargs

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

从 XML 中提取属性值

使用 Bash,

文件:

<?xml version="1.0" encoding="UTF-8"?>
<blah>
    <blah1 path="er" name="andy" remote="origin" branch="master" tag="true" />
    <blah1 path="er/er1" name="Roger" remote="origin" branch="childbranch" tag="true" />
    <blah1 path="er/er2" name="Steven" remote="origin" branch="master" tag="true" />

</blah>
Run Code Online (Sandbox Code Playgroud)

我尝试了以下方法:

grep -i 'name="andy" remote="origin" branch=".*\"' <filename>
Run Code Online (Sandbox Code Playgroud)

但它返回整行:

<blah1 path="er" name="andy" remote="origin" branch="master" tag="true" />
Run Code Online (Sandbox Code Playgroud)

我想根据以下内容匹配该行:

name="andy"
Run Code Online (Sandbox Code Playgroud)

我只想让它返回:

master
Run Code Online (Sandbox Code Playgroud)

grep xml

11
推荐指数
3
解决办法
1万
查看次数

使用命令行实用程序在 UNIX 中解析 XML、JSON 和更新的数据文件格式

Unix 环境有一些优秀的工具可以解析各种形式的文本。但是,最近,数据不再采用以前的传统(历史)格式(CSV、TSV、基于记录或其他一些基于分隔符的格式)。如今,数据以 XML/JSON 等结构化格式进行交换。

我知道有一些很好的工具,比如 sed、awk 和 Perl,它们几乎可以处理任何形式的数据。但是,要处理这种结构化数据,通常必须编写一个完整的程序,而且由于可用于提取信息的时间很少,因此必须坐下来弄清楚要查询和放置的内容的整个逻辑以编程方式将其关闭。有时这是不行的——主要是因为从这些文件中提取的信息作为进一步工作的输入;还因为搜索适当的解决方案并对其进行编码需要时间。需要一个带有足够开关的命令行工具来查找、查询和转储数据。

我正在寻找采用 XML/JSON 或其他形式的结构化数据并将其转储为其他格式(如 csv 等)的工具,以便从那里可以使用其他命令从中获取任何信息。

是否有任何命令行实用程序可以完成此类工作?是否已经有可用的 awk/Perl 脚本?

xml text-processing

10
推荐指数
2
解决办法
2963
查看次数

如何比较不同行中具有相同数据的两个xml文件?

我有两个文件具有相同的数据但在不同的行中。

文件 1:

<Identities>
    <Identity>
        <Id>048206031415072010Comcast.USR8JR</Id>
        <UID>ccp_test_79</UID>
        <DisplayName>JOSH CCP</DisplayName>
        <FirstName>JOSH</FirstName>
        <LastName>CCP</LastName>
        <Role>P</Role>
        <LoginStatus>C</LoginStatus>
    </Identity>
    <Identity>
        <Id>089612381523032011Comcast.USR1JR</Id>
        <UID>94701_account1</UID>
        <DisplayName>account1</DisplayName>
        <FirstName>account1</FirstName>
        <LastName>94701</LastName>
        <Role>S</Role>
        <LoginStatus>C</LoginStatus>
    </Identity>
</Identities>
Run Code Online (Sandbox Code Playgroud)

文件 2:

<Identities>
    <Identity>
        <Id>089612381523032011Comcast.USR1JR</Id>
        <UID>94701_account1</UID>
        <DisplayName>account1</DisplayName>
        <FirstName>account1</FirstName>
        <LastName>94701</LastName>
        <Role>S</Role>
        <LoginStatus>C</LoginStatus>
    </Identity>
    <Identity>
        <Id>048206031415072010Comcast.USR8JR</Id>
        <UID>ccp_test_79</UID>
        <DisplayName>JOSH CCP</DisplayName>
        <FirstName>JOSH</FirstName>
        <LastName>CCP</LastName>
        <Role>P</Role>
        <LoginStatus>C</LoginStatus>
    </Identity>
</Identities>
Run Code Online (Sandbox Code Playgroud)

如果我使用diff file1 file2命令,我会得到以下响应:

1,10d0
<     <Identities>
<         <Identity>
<             <Id>048206031415072010Comcast.USR8JR</Id>
<             <UID>ccp_test_79</UID>
<             <DisplayName>JOSH CCP</DisplayName>
<             <FirstName>JOSH</FirstName>
<             <LastName>CCP</LastName>
<             <Role>P</Role>
<             <LoginStatus>C</LoginStatus>
<         </Identity>
20a11,20
>     <Identities>
>         <Identity>
> …
Run Code Online (Sandbox Code Playgroud)

shell bash xml file-comparison

10
推荐指数
1
解决办法
3万
查看次数