从外壳程序向XML文档的默认名称空间的标签添加名称空间前缀

问题描述 投票:0回答:1

我有一个SVG文件,它是一个XML文档:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
   xmlns:svg="http://www.w3.org/2000/svg"
   xmlns="http://www.w3.org/2000/svg"
   xmlns:xlink="http://www.w3.org/1999/xlink"
   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape">
  <defs
     id="defs2">
  <!-- a lot of stuff --> </defs>
  <!-- more stuff like -->
  <metadata
     id="metadata5">
    <rdf:RDF>
      <cc:Work
         rdf:about="">
        <dc:format>image/svg+xml</dc:format>
        <dc:type
           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
        <dc:title />
      </cc:Work>
    </rdf:RDF>
  </metadata>
  <!-- etc... -->
</svg>

我想将svg:前缀添加到与默认名称空间相对应的所有标记中,以获得下一个输出:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg:svg
   xmlns:svg="http://www.w3.org/2000/svg"
   xmlns:xlink="http://www.w3.org/1999/xlink"
   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape">
  <svg:defs
     id="defs2">
  <!-- a lot of stuff--> </svg:defs>
  <!-- more stuff like -->
  <svg:metadata
     id="metadata5">
    <rdf:RDF>
      <cc:Work
         rdf:about="">
        <dc:format>image/svg+xml</dc:format>
        <dc:type
           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
        <dc:title />
      </cc:Work>
    </rdf:RDF>
  </svg:metadata>
  <!-- etc... -->
</svg:svg>

我确信可以使用xmllint和/或xmlstarlet在外壳程序的一个或几个命令行中实现此功能,但我无法对其进行管理。

xml namespaces xmlstarlet xmllint
1个回答
0
投票

您准备尝试使用Saxon 10.0中的新Gizmo工具吗?如果是这样:

© www.soinside.com 2019 - 2024. All rights reserved.