[英]xmlns attribute not getting set in xslt transformation
我正在将样式表和输入流传Transformer
类以获取输出XML。
传递给xmlns的相对变量不会在结果中被替换。
输入流:
"http://www.abc.com/foo/bar"
+"EventCommon"
+"application,xsd:string"
+"companyId,xsd:string"
+"operator,xsd:string"
+"today,xsd:date"
+"transactionStage,xsd:string"
样式表:
<xsl:stylesheet
version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
>
<xsl:output method="xml" encoding="UTF-8" indent="yes" />
<xsl:template match="/">
<xsl:variable name="var_main_namespace" select="array/data[@attribute=1][@value=1][@subvalue=1]" />
<xsd:schema xmlns="($var_main_namespace)" targetNamespace="{$var_main_namespace}" elementFormDefault="qualified" />
</xsl:template>
</xsl:stylesheet>
输出XML:
<xsd:schema
xmlns="($var_main_namespace)"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.abc.com/foo/bar"
elementFormDefault="qualified"
/>
代码段:
TransformerFactory tFactory = TransformerFactory.newInstance();
StreamSource sc = new StreamSource(new ByteArrayInputStream(new String(c).getBytes()));
Transformer transformer = tFactory.newTransformer(sc);
ByteArrayOutputStream outputxml = new ByteArrayOutputStream();
transformer.transform(
new StreamSource(
new ByteArrayInputStream(new String(c2).getBytes())
),
new StreamResult(outputxml)
);
任何帮助表示赞赏
撇开($...)
与{$...}
错字,这是行不通的,因为xmlns
不是属性,它是名称空间声明。
不是属性,文字结果元素中的名称空间声明不会被视为属性值模板,并且您无法使用<xsl:attribute>
创建它们。 但是,显然您在使用XSLT 2.0时, 可以使用<xsl:namespace>
创建它们
<xsl:template match="/">
<xsl:variable name="var_main_namespace" select="array/data[@attribute=1][@value=1][@subvalue=1]" />
<xsd:schema targetNamespace="{$var_main_namespace}" elementFormDefault="qualified">
<xsl:namespace name="" select="$var_main_namespace" />
</xsd:schema>
</xsl:template>
为了使此代码与Java代码一起使用,您已将默认的TransformerFactory
设置为支持XSLT 2.0的代码,例如Saxon 9。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.