如何规范,#13; 及#2.在java中创建xml元素时

如何规范,#13; 及#2.在java中创建xml元素时,java,xml,dom,xslt,Java,Xml,Dom,Xslt,在创建文本节点时,我使用org.w3c.dom.Document构建xml Document xmlDocument;//This has document Node xmlNode = Document xmlDocument.getDocumentElement(); xmlNode.appendChild(getDocument().createTextNode(value)); 如果文本值具有“abc\r\n”,则插入\rxml字符代码“ ;”。因此,在xml上应用xslt转换

在创建文本节点时,我使用
org.w3c.dom.Document
构建xml

Document xmlDocument;//This has document 
Node xmlNode = Document xmlDocument.getDocumentElement();
xmlNode.appendChild(getDocument().createTextNode(value));
如果文本值具有
“abc\r\n”
,则插入
\r
xml字符代码
“
;”
。因此,在xml上应用xslt转换时

[Fatal Error] :103:320: Character reference "
" is an invalid XML character.
同样,我对
”和#2;“
这个字符也有疑问,这是我的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>
这里的
source
xslt路径

根据,
&2
不是有效的XML字符,但

有效,不应给出错误。这意味着你不能放任何东西
和#2字符,即使在Java中使用
\2
字符是有效的

有效XML字符的定义为:

合法字符包括制表符、回车符、换行符和合法字符 Unicode和ISO/IEC 10646的字符


是回车(与XML中的
&xD;
或Java中的
\r
相同)


我试着运行你的代码来看看会发生什么,但它没有编译,而且它丢失了太多的部分,我无法用手轻松修复。

建议:关注问题中的一件事,而不是两件不相关的事-创建两个问题。问:你到底做了什么使你得到 ;还有你提到的错误。在调用xslt之前,是否先将XML写入文件?如何将其写入文件(源代码)。感谢您的建议。我已经更新了代码,请建议感谢您的回答…很抱歉无法从工作空间粘贴所有代码…我浏览了XML规范…用于;,我试图打印System.out.println(StringEscapeUtils.unescapeXml(;);它给了我这个字符..这里STringEscapeUtil来自apache..对此有什么帮助吗?对不起,我粘贴在这里的等效字符没有反映出来。如果您不介意,我有一个问题,如何构造xslt以不删除名称空间。。
<head xmlns:test="">
<body>
   <p-elm xmlns:xyz=""></p-elm>
</body>
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);