我正在使用org.w3c.dom.Document
和创建文本节点时构建xml
Document xmlDocument;//This has document
Node xmlNode = Document xmlDocument.getDocumentElement();
xmlNode.appendChild(getDocument().createTextNode(value));
如果文本值具有"abcrn"
则代替r
xml字符代码" "
将入。 因此,当在XML上应用XSLT转换时,其
[Fatal Error] :103:320: Character reference " " is an invalid XML character.
同样,我对这个角色""
也有问题,这是我的xslt:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:strip-space elements="*" />
<xsl:output indent="yes" />
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()" />
</xsl:copy>
</xsl:template>
<xsl:template
match="*[not(descendant-or-self::*[text()[normalize-space()] | @*])]">
<!-- process element and descendants in mode for debugging -->
<xsl:apply-templates select="." mode="debug" />
</xsl:template>
<xsl:template match="*" mode="debug">
<xsl:message terminate="no">
Deleting
<xsl:value-of select="local-name()" />
.
</xsl:message>
<xsl:apply-templates select="*" mode="debug" />
</xsl:template>
</xsl:stylesheet>
除了我还有另一个问题,在生成 xml 后,它会从子元素中删除命名空间声明,例如:
<head xmlns:test="">
<body>
<p-elm xmlns:xyz=""></p-elm>
</body>
从<p-elm>
XML 命名空间被删除。
任何建议都将得到:)
应用转换的代码段:
DOMSource domSource = new DOMSource(getDocument());
TransformerFactory tf = TransformerFactory.newInstance();
if(source != null){
//Templates template = tf.newTemplates(source);
Templates template = tf.newTemplates(new StreamSource(this.getClass().getResourceAsStream(source)));
serializer = template.newTransformer();
}else{
serializer = tf.newTransformer();
}
if (outputProperties != null) {
Iterator iter = outputProperties.entrySet().iterator();
while (iter.hasNext()) {
Entry entry = (Entry) iter.next();
serializer.setOutputProperty((String) entry.getKey(), (String) entry.getValue());
}
}
//XmlUtil.prettyFormat(reader, writer);
serializer.transform(domSource, streamResult);
这里source
xslt path
规范(第 2.2 节),
不是有效的 XML 字符,但
是有效的,不应给出错误。这意味着您不允许放置任何 
XML 文档中的字符,即使在 Java 中使用2
字符也是有效的。
有效 XML 字符的定义是:
法律字符是制表符、回车符、换行符和合法字符 Unicode 和 ISO/IEC 10646 的字符。
是一个回车符(与 XML 中的回车
或 Java 中的回车r
相同)
试图运行您的代码以查看会发生什么,但它无法编译并且缺少太多部分,以至于我无法轻松手动修复。