XML作为使用XSLT的html输入属性的值

时间:2014-05-27 15:57:05

标签: xslt-2.0 saxon

我有一个类似下面的XML。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE myxml SYSTEM  "xyz.dtd">
<myxml payloadID="__PAYLOADID__" timestamp="__TIMESTAMP__" xml:lang="en-US">
   <Header>
      <From>
      <Credential domain="test">
        <Identity>blahblah&amp;test</Identity>
      </Credential>
      </From>
   </Header>
  <Extrinsic name="GroupLineID"/>
</myxml>

我正在尝试创建HTML页面,其中需要将上面的XML放置为html输入标记的属性值。我正在使用Java和Saxon来运行XSLT。我的XSLT是

<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:saxon="http://saxon.sf.net/">

<xsl:output name="test" method="xml" encoding="UTF-8" omit-xml-declaration="yes" indent="yes" />

<xsl:template match="/">

<html >
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<xsl:element name="INPUT">
<xsl:attribute name="NAME">xml</xsl:attribute>
<xsl:attribute name="TYPE">HIDDEN</xsl:attribute>
<xsl:attribute name="VALUE"><xsl:copy-of select="saxon:serialize(myxml,'test')"></xsl:copy-of></xsl:attribute>
</xsl:element> 
</html>
</xsl:template>

此XSLT的输出是

<html xmlns:saxon="http://saxon.sf.net/">
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<INPUT NAME="xml" TYPE="HIDDEN" VALUE="<myxml payloadID=&#34;__PAYLOADID__&#34; timestamp=&#34;__TIMESTAMP__&#34; xml:lang=&#34;en-US&#34;&gt;&#xA;   <Header&gt;&#xA;      <From&gt;&#xA;        <Credential domain=&#34;test&#34;&gt;&#xA;          <Identity&gt;blahblah&amp;amp;test</Identity&gt;&#xA;        </Credential&gt;&#xA;      </From&gt;&#xA;   </Header&gt;&#xA;   <Extrinsic name=&#34;GroupLineID&#34;/&gt;&#xA;</myxml&gt;">
</html>

但我需要在输出中也有xml和doctype声明,如下所示

 <html xmlns:saxon="http://saxon.sf.net/">
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<INPUT NAME="xml" TYPE="HIDDEN" VALUE="<?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?><!DOCTYPE myxml SYSTEM &quot;xyz.dtd&quote;><myxml payloadID=&#34;__PAYLOADID__&#34; timestamp=&#34;__TIMESTAMP__&#34; xml:lang=&#34;en-US&#34;&gt;&#xA;   <Header&gt;&#xA;      <From&gt;&#xA;        <Credential domain=&#34;test&#34;&gt;&#xA;          <Identity&gt;blahblah&amp;amp;test</Identity&gt;&#xA;        </Credential&gt;&#xA;      </From&gt;&#xA;   </Header&gt;&#xA;   <Extrinsic name=&#34;GroupLineID&#34;/&gt;&#xA;</myxml&gt;">
</html>

任何帮助表示赞赏!

2 个答案:

答案 0 :(得分:0)

XML声明和DOCTYPE声明都不是XSLT数据模型的一部分,因此XSLT处理器无法访问XML输入文档的那些部分。使用http://andrewjwelch.com/lexev/您可能会获得DOCTYPE。

答案 1 :(得分:0)

如果您想要包含XML声明,为什么在omit-xml-declaration="yes"声明中说xsl:output

同样,如果您使用doctype-system的{​​{1}}和doctype-public属性,则可以在saxon的输出中获取DOCTYPE声明:serialize。