【问题标题】:您可以通过 XSLT 重写 xml 并添加其他数据吗
【发布时间】:2022-01-17 15:11:48
【问题描述】:

我正在尝试生成一个可以导入到 Illustrator 变量数据集中的 XML 文件。

我从网站收到一个 XML 文件,如下所示。

<field-list>
 <field Id="spMF_1_6">
  <tag>Hårfarve</tag>
  <type>choice</type>
  <value>hair_red</value>
 </field>
</field-list>

我需要重写 XML 并将原始 XML 中的“值”数据插入“sampleDataSet”中,因此 Illustrator 将接受该文件。

完成的文件应该如下所示。

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" [
    <!ENTITY ns_flows "http://ns.adobe.com/Flows/1.0/">
    <!ENTITY ns_extend "http://ns.adobe.com/Extensibility/1.0/">
    <!ENTITY ns_graphs "http://ns.adobe.com/Graphs/1.0/">
    <!ENTITY ns_vars "http://ns.adobe.com/Variables/1.0/">
    <!ENTITY ns_custom "http://ns.adobe.com/GenericCustomNamespace/1.0/">
    <!ENTITY ns_flows "http://ns.adobe.com/Flows/1.0/">
    <!ENTITY ns_svg "http://www.w3.org/2000/svg">
    <!ENTITY ns_ai "http://ns.adobe.com/AdobeIllustrator/10.0/">
    <!ENTITY ns_sfw "http://ns.adobe.com/SaveForWeb/1.0/">
    <!ENTITY ns_adobe_xpath "http://ns.adobe.com/XPath/1.0/">
    <!ENTITY ns_imrep "http://ns.adobe.com/ImageReplacement/1.0/">
]>
<svg version="1.1"
     xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:a="http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/"
     x="0px" y="0px" width="0px" height="0px" viewBox="0 0 0 0" style="overflow:visible;" xml:space="preserve">
<variableSets  xmlns="&ns_vars;">
    <variableSet  locked="none" varSetName="binding1">
        <variables>
            <variable  category="&ns_vars;" trait="visibility" varName="hair_brown"></variable>
            <variable  category="&ns_vars;" trait="visibility" varName="hair_red"></variable>
            <variable  category="&ns_vars;" trait="visibility" varName="hair_blond"></variable>
        </variables>
        <v:sampleDataSets  xmlns="&ns_custom;" xmlns:v="&ns_vars;">
            <v:sampleDataSet  dataSetName="Datasæt 1">

               <hair_red>true</hair_red>

            </v:sampleDataSet>
        </v:sampleDataSets>
    </variableSet>
</variableSets>
</svg>

我对 XML 和 XSLT 的了解还不够,不知道这是否可能,所以我希望我能在这里找到答案。

【问题讨论】:

  • 请就您在尝试完成此操作时遇到的困难提出一个具体问题。否则看起来你只是在找人为你编写代码。

标签: xml xslt


【解决方案1】:

这里唯一棘手的部分是生成包含 DTD 和实体引用的文档 - XSLT 不直接支持。 Saxon 等产品中有一些扩展可能会有所帮助,但您仍需要进行一些后期处理。 Andrew Welch 有一个名为 Lexev 的产品作为 XSLT 插件来帮助处理带有实体引用的 XML,我不知道它是否仍然有效。

但基本上,您需要做的是以§ns_vars; 代替&amp;ns_vars; 的形式生成实体引用,然后对序列化输出进行后处理以将§ 替换为&amp;

【讨论】:

  • 我怀疑使用它们的实际 URI 而不是实体引用来声明命名空间的结果也是可以接受的。
  • 也许吧。如果 OP 告诉我们问题的哪一部分被证明具有挑战性,那么建议会更容易。
猜你喜欢
  • 2011-03-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-27
  • 2014-05-15
  • 1970-01-01
  • 2018-03-18
相关资源
最近更新 更多