1

多个文件

我得到了一系列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="&#xF900;" glyph-name="豈" horiz-adv-x="256" d=""/>
    </font>
  </defs>
</svg>

任务

对于每个generated-*.svg

  1. 我想得到结果序列/svg/defs/font/glyph
  2. 将序列附加到现有文件中的相同位置/xpath并保留现有节点。

所以从生成的文件移动到一个公共文件。

问题

如何/svg/defs/font/glyph从每个generated-*.svg, 复制结果序列,并将其插入到同一 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="&#xF900;" glyph-name="豈" horiz-adv-x="256" d=""/>
      <glyph unicode="&#xF901;" glyph-name="更" horiz-adv-x="256" d=""/><!-- from: generated-01.svg -->
      <glyph unicode="&#xF902;" glyph-name="車" horiz-adv-x="256" d=""/><!-- from: generated-01.svg -->
      <glyph unicode="&#xF903;" glyph-name="賈" horiz-adv-x="256" d=""/><!-- from: generated-02.svg -->
      <glyph unicode="&#xF904;" glyph-name="滑" horiz-adv-x="256" d=""/><!-- from: generated-02.svg -->
      <glyph unicode="&#xF905;" glyph-name="串" horiz-adv-x="256" d=""/><!-- from: generated-02.svg -->
      <glyph unicode="&#xF906;" glyph-name="句" horiz-adv-x="256" d=""/><!-- from: generated-03.svg -->
      <glyph unicode="&#xF907;" glyph-name="龜" horiz-adv-x="256" d=""/><!-- from: generated-03.svg -->
      <glyph unicode="&#xF908;" glyph-name="龜" horiz-adv-x="256" d=""/><!-- from: generated-03.svg -->
    </font>
  </defs>
</svg>

相关问题

4

1 回答 1

2

创建一个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 节点并获得缩进。

于 2013-09-12T10:52:20.323 回答