0

我在我的项目中将一个 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>

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

我尝试了很多方法来做到这一点(不是标准的东西)..最后我尝试用空格替换 word xml replace 并将其转换为 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 进行开发。

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

4

2 回答 2

1

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

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

但是,对于您的输入片段,这是行不通的,因为内容格式不正确,给定&#x2028;转义标记的根元素之前的字符。所以不太清楚你有什么样的内容,如果它不是一个 XML 文档也不是一个 XML 片段,那么也parse-xml没有parse-xml-fragment帮助。

于 2017-02-03T14:40:41.037 回答
0

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

  <xsl:template match="Content">
    <xsl:value-of disable-output-escaping="yes" select="replace(., '^\s*&lt;\?xml.*?\?&gt;', '')"/>
  </xsl:template>
于 2020-09-07T08:32:07.277 回答