【问题标题】:Retrieve XML Node Structure - Bash检索 XML 节点结构 - Bash
【发布时间】:2019-10-31 12:40:36
【问题描述】:

我正在尝试通过 git bash 在 Windows 机器上检索给定 XML 文件的节点结构。我几乎完全遵循了in this example 中提到的内容。

我正在运行与示例中相同的命令,即:

xml sel -T -t -m '//*' \
    -m 'ancestor-or-self::*' -v 'name()' -i 'not(position()=last())' -o \
    . -b -b -n structure.xml

此命令在 MAC 上运行良好(通过常规终端)。但是,当我通过 git bash 在 Windows 机器上运行它时,它只返回 XML 结构的根节点,而不是按预期返回整个树。

为了获得整个结构而运行的等效命令是什么?我尝试指定不同的 XPath 轴指定为 here,但无济于事。

编辑:

比如说,我有下面的 XML 结构

<node1>
   <node2>
       <node3>Whatever</node3>
   </node2>
<node1>

上面的命令应该返回(就像在 MAC 上一样)

node1
node1.node2
node1.node2.node3

而在 Windows 上,它只是返回根节点,即node1

【问题讨论】:

  • 您是否尝试根据您链接的主题中的其余答案更改属性?除了作为示例给出的代码之外,还有更多内容;)
  • 当你说属性时,你是什么意思?我尝试了多个 XPath,例如“祖先”、“后代”、“子”等。
  • 他们在 cmets 中提供了更多关于 xml 树显示的解决方案,所以我只是问您是否也尝试了那里的所有选项,以便我可以忽略它们并考虑其他事情:D
  • 哦,是的,我已经尝试了这些选项。老实说,我上面提到的示例是完美的输出,因为它逐行显示所有节点的结构。这样,我可以获取结果并将其放入一个数组中,然后对每个节点执行我想要的操作。请查看我在问题中的编辑以了解我的意思。总而言之,是的,除了示例中提到的以外,请与我一起想一个解决方案:D
  • @RigaCrypto 我没有任何运气想出一个潜在的解决方案。有机会你能帮忙吗?

标签: xml bash shell xmlstarlet


【解决方案1】:

或者,尝试运行以下复合命令:

structure=$(xml el structure.xml) && echo "${structure//\//.}"

说明:

  1. 这会运行一个更简单的xmlstarlet cmd,使用command substitution 将结果分配给structure 变量。 xmlstarlet 命令返回用正斜杠 (/) 分隔的节点名称。

    例如:

    node1/node2/node3

  2. &amp;&amp; 运算符之后,我们echo 使用parameter expansionstructure 的值替换为点(.)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-06
    • 1970-01-01
    • 2020-12-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多