使用saxon

时间:2015-07-29 11:34:59

标签: xslt-2.0

我在xsl样式表中使用了exclude-result-prefixes =“ae”。然后,转换后的XML文件中也存在名称空间。我正在使用saxon解析器。请在下面找到我的MWE:

我的XML文件是:

<?xml version="1.0" encoding="UTF-8"?>
<ArticleInfo Language="En" ContainsESM="No" OutputMedium="All">
<ArticleID>034</ArticleID>
<ArticleJID>BMCL</ArticleJID>
<ArticleDOI>10.1000/j.asdf.2015.02.034</ArticleDOI>
<ArticleTitle>Sample Article Title with &#x2015; unicode value</ArticleTitle>
<Para>Sample Paragraph text here</Para>
</ArticleInfo>

和我的XSL文件是:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:ae="www.ams.org" exclude-result-prefixes="ae" version="3.0">

<xsl:output omit-xml-declaration="no" indent="yes" method="xml"/>

<xsl:strip-space elements="*"/>

<xsl:template match="/">
<xsl:text disable-output-escaping="yes">
&lt;!DOCTYPE article PUBLIC "-//AMS//DTD journal article//EN//XML" "art.dtd"&gt;
</xsl:text>  
<xsl:apply-templates/>
</xsl:template>

<xsl:template match="node()|@*">
  <xsl:copy>
    <xsl:apply-templates select="@*|node()"/>
  </xsl:copy>
</xsl:template>

<xsl:variable name="ElsDoi" select="/ArticleInfo/ArticleDOI"/>

<xsl:template match="ArticleInfo">
<ae:doi><xsl:value-of select="$ElsDoi"/></ae:doi>
<xsl:apply-templates/>
</xsl:template>

<xsl:template match="Para">
  <xsl:element name="ae:para">
    <xsl:apply-templates select="@* | node()"/>
  </xsl:element>
</xsl:template>
</xsl:stylesheet>

我正在获取输出XML文件:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE article PUBLIC "-//AMS//DTD journal article//EN//XML" "art.dtd">
<ae:doi xmlns:ae="www.ams.org">10.1000/j.asdf.2015.02.034</ae:doi>
<ArticleID>034</ArticleID>
<ArticleJID>BMCL</ArticleJID>
<ArticleDOI>10.1000/j.asdf.2015.02.034</ArticleDOI>
<ArticleTitle>Sample Article Title with ― unicode value</ArticleTitle>
<ae:para xmlns:ae="www.ams.org">Sample Paragraph text here</ae:para>

期望输出XML文件是:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE article PUBLIC "-//AMS//DTD journal article//EN//XML" "art.dtd">
<ae:doi>10.1000/j.asdf.2015.02.034</ae:doi>
<ArticleID>034</ArticleID>
<ArticleJID>BMCL</ArticleJID>
<ArticleDOI>10.1000/j.asdf.2015.02.034</ArticleDOI>
<ArticleTitle>Sample Article Title with ― unicode value</ArticleTitle>
<ae:para>Sample Paragraph text here</ae:para>

请注意,输出XML文件中存在不需要的xmlns:ae="www.ams.org",标题&#x2015中也会转换为unicode符号。如何避免这种情况。

1 个答案:

答案 0 :(得分:1)

使用<xsl:element name="ae:para">,您明确地在绑定到前缀ae的命名空间中创建一个元素,因此不要求排除结果前缀排除该命名空间,因为它只是有用避免未使用的命名空间的名称空间声明。节点名称中使用的命名空间不能用exclude-result-prefixes排除,否则结果将不是命名空间格式良好的XML。