多个文件
我得到了一系列遵循以下结构的文档(generated-*.svg
):
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
<svg xmlns="http://www.w3.org/2000/svg" width="100%" height="100%">
<defs>
<font id="Hanzi-Pinyin-ruby-font" horiz-adv-x="254">
<font-face font-family="Droid Sans Fallback" units-per-em="256" panose-1="2 11 5 2 0 0 0 0 0 1" ascent="267" descent="-68" alphabetic="0"/>
<missing-glyph horiz-adv-x="256" d="M75 183H181V0H75V183ZM88 13H167V170H88V13Z"/>
<glyph unicode="豈" glyph-name="豈" horiz-adv-x="256" d=""/>
</font>
</defs>
</svg>
任务
对于每个generated-*.svg
:
- 我想得到
/svg/defs/font/glyph
的结果序列; - 将序列附加到同一位置/xpath 中的现有文件并保留现有节点。
因此,从生成的文件移动到通用文件。
问题
如何从每个generated-*.svg
复制生成的/svg/defs/font/glyph
序列,并将其插入到同一 xpath 中的目标文件中?结果输出如下:
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
<svg xmlns="http://www.w3.org/2000/svg" width="100%" height="100%">
<defs>
<font id="Hanzi-Pinyin-ruby-font" horiz-adv-x="254">
<font-face font-family="Droid Sans Fallback" units-per-em="256" panose-1="2 11 5 2 0 0 0 0 0 1" ascent="267" descent="-68" alphabetic="0"/>
<missing-glyph horiz-adv-x="256" d="M75 183H181V0H75V183ZM88 13H167V170H88V13Z"/>
<glyph unicode="豈" glyph-name="豈" horiz-adv-x="256" d=""/>
<glyph unicode="更" glyph-name="更" horiz-adv-x="256" d=""/><!-- from: generated-01.svg -->
<glyph unicode="車" glyph-name="車" horiz-adv-x="256" d=""/><!-- from: generated-01.svg -->
<glyph unicode="賈" glyph-name="賈" horiz-adv-x="256" d=""/><!-- from: generated-02.svg -->
<glyph unicode="滑" glyph-name="滑" horiz-adv-x="256" d=""/><!-- from: generated-02.svg -->
<glyph unicode="串" glyph-name="串" horiz-adv-x="256" d=""/><!-- from: generated-02.svg -->
<glyph unicode="句" glyph-name="句" horiz-adv-x="256" d=""/><!-- from: generated-03.svg -->
<glyph unicode="龜" glyph-name="龜" horiz-adv-x="256" d=""/><!-- from: generated-03.svg -->
<glyph unicode="龜" glyph-name="龜" horiz-adv-x="256" d=""/><!-- from: generated-03.svg -->
</font>
</defs>
</svg>
相关问题
- 如何将XML子树从一个文件复制/移动到另一个文件?
- 使用 xmlstarlet 将 XML 从一个文件插入到另一个文件中?
创建一个包含内容的文件collection.xml
<files>
<file>generated-01.svg</file>
<file>generated-02.svg</file>
<file>generated-03.svg</file>
...
</files>
然后使用一个 XSLT 样式表
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0"
xmlns:svg="http://www.w3.org/2000/svg">
<xsl:param name="col-url" select="'collection.xml'"/>
<xsl:variable name="col-doc" select="document($col-url)"/>
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="/svg:svg/svg:defs/svg:font">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
<xsl:copy-of select="document($col-doc/files/file)/svg:svg/svg:defs/svg:font/svg:glyph"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
您可能需要添加 xsl:output
指令以在输出中添加 DOCTYPE 节点并获取缩进。