【问题标题】:How to remove extra xml declaration from xml in XSLT?如何从 XSLT 中的 xml 中删除额外的 xml 声明?
【发布时间】:2017-02-03 13:56:17
【问题描述】:

我在我的项目中将一个 idml 文件转换为一个 xml。我有一个关于额外 xml 声明的问题。 这是idml文件的一部分:`

<Content> &lt;?xml version="1.0" encoding="UTF-16"
    standalone="yes"?&gt;&#x2028;&lt;math&gt;
    &lt;/math&gt;</Content>

` 这是我转换后得到的输出:

    <?xml version="1.0" encoding="UTF-8"?>
<content>
    <?xml version="1.0" encoding="UTF-16" standalone="yes"?>
    <math></math>
</content>

我的任务是用 替换 &amp;lt;&amp;gt;,然后我遇到了这个问题..

我尝试了很多方法来做到这一点(不是标准的东西)..最后我尝试用空格替换 word xml 替换并将其转换为 PI 并在后处理模式下转换 PI..但它也没有成功

<xsl:template match="Content">
    <xsl:if test=".[contains(text(),'math')]">
         <xsl:value-of select="replace(./text(),'xml','')”/>
    </xsl:if>
</xsl:template>

我要生成的输出:

<?xml version="1.0" encoding="UTF-8"?> <content><math></math></content>

我正在使用 Saxon 9.7.0HE 进行开发。

请帮我解决这个问题..谢谢..!

【问题讨论】:

  • 您到底使用哪个 XSLT 2.0 处理器?您要为您发布的输入创建什么输出?
  • @Martin 我想生成如下输出: 和我在开发中使用 saxon 9..
  • 请编辑问题并将您想要的输出显示为代码 sn-p。至于 Saxon 9,究竟是哪个版本?例如,Saxon 9.7 支持 parse-xml,早期的商业版本支持类似的扩展功能,这样您可以将 Content 元素的内容解析为 XML 并输出节点,您将摆脱嵌套,以干净的方式转义 XML 声明。
  • @Martin 我道歉..编辑了这个问题..我对 parse-xml 没有明确的想法..正在搜索一些文档..

标签: xslt-2.0 mathml idml


【解决方案1】:

version="3.0" 样式表中,您可以使用

<xsl:template match="Content">
    <content>
        <xsl:copy-of select="parse-xml(normalize-space())"/>
    </content>
</xsl:template>

但是,在转义标记的根元素之前给定&amp;#x2028; 字符,由于内容格式不正确,因此您的输入 sn-p 不起作用。所以不太清楚你在那里有什么样的内容,如果它不是 XML 文档也不是 XML 片段,那么parse-xmlparse-xml-fragment 都不会有帮助。

【讨论】:

  • 你的意思是 xslt 3.0 作为这里的版本吗?我正在使用 xslt 2.0 ..
在代码中处理,但随着更多节点的复杂化,我将其删除。如果我是正确的输入是 idml 并且我得到的输出是 xml(都是 xml 格式)..
  • 在 Saxon 9.7 HE 中使用 parse-xml 解析元素数据内的 XML 的唯一方法是设置 version="3.0",因此如果您想使用该方法,则需要更改版本。跨度>
【解决方案2】:

我知道这是一个老问题,但偶然发现它的人可能仍然希望看到适用于 version="1.0" 样式表的答案。所以这里有一个解决方案,只需删除第一行 / XML 声明即可:

  <xsl:template match="Content">
    <xsl:value-of disable-output-escaping="yes" select="replace(., '^\s*&lt;\?xml.*?\?&gt;', '')"/>
  </xsl:template>

【讨论】:

    猜你喜欢
    • 2012-01-24
    • 1970-01-01
    • 2017-04-01
    • 2015-08-14
    • 1970-01-01
    • 1970-01-01
    • 2015-01-26
    • 1970-01-01
    • 2015-12-06
    相关资源
    最近更新 更多