我有一个类似下面的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&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="__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和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="1.0" encoding="UTF-8"?><!DOCTYPE myxml SYSTEM "xyz.dtd"e;><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>
任何帮助表示赞赏!
答案 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。