【问题标题】:XML as an value of html input attribute using XSLTXML 作为使用 XSLT 的 html 输入属性的值
【发布时间】:2014-05-27 15:57:04
【问题描述】:

我有一个如下所示的 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 Input 标记的属性值。我正在使用 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>

任何帮助表示赞赏!

【问题讨论】:

    标签: xslt-2.0 saxon


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      同样,如果您使用xsl:outputdoctype-systemdoctype-public 属性,您可以在 saxon:serialize 的输出中获得 DOCTYPE 声明。

      【讨论】:

        猜你喜欢
        • 2021-09-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-11-21
        • 1970-01-01
        • 2021-07-28
        • 2014-12-21
        • 1970-01-01
        相关资源
        最近更新 更多