3

我有一个如下的xml。

<!DOCTYPE parent [
<!ENTITY entity1 "value"> 
]>
<main>
<parent attr1="str1"
        attr2="str2">
<child childattr1="str3"
       childattr2="&entity1;" />
<child childattr1="str4"
       childattr2="&entity1;" />
</parent>
</main>

我需要缩进子元素,将 xml 文件的其余部分保持原样(即不应删除 dtd 部分和实体,属性应位于新行上)。xml 最终应如下所示:

<!DOCTYPE parent [
<!ENTITY entity1 "value"> 
]>
<main>
    <parent attr1="str1"
            attr2="str2">
        <child childattr1="str3"
               childattr2="&entity1;" />
        <child childattr1="str4"
               childattr2="&entity1;" />
    </parent>
</main>

我试过使用xmllintand tidyxmllint正在缩进子元素,但它没有将属性保留在新行中。tidy另一方面,可以选择将属性保留在新行中,但无法缩进子元素。我也尝试过使用 perl 正则表达式。这可能可以用 XSLT 完成,但我并不精通它。

4

1 回答 1

4

在我看来,它XML::Twigxml_pp实用程序几乎可以满足您的需求indented_a

$ xml_pp -s indented_a foo.xml
<!DOCTYPE parent [
<!ENTITY entity1 "value">
]>
<main>
  <parent
      attr1="str1"
      attr2="str2">
    <child
        childattr1="str3"
        childattr2="&entity1;"
    />
    <child
        childattr1="str4"
        childattr2="&entity1;"
    />
  </parent>
</main>
于 2013-06-27T13:05:32.090 回答