如何规范化  和?在java中创建xml元素

时间:2014-02-28 11:41:36

标签: 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",则代替\r xml charecter代码"
"即将插入。所以当在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);

此处sourcexslt path

1 个答案:

答案 0 :(得分:0)

根据XML specification (section 2.2)&#2;不是有效的XML字符,但&#13;有效且不应出错。这意味着你不能放任何东西 XML文档中的&#2;字符,即使Java中有\2字符也是有效的。

有效XML字符的定义是:

  

合法字符包括标签,回车,换行符和合法字符   Unicode和ISO / IEC 10646的字符。

&#13;是一个回车符(与XML中的&#xD;或Java中的\r相同)

我试图运行你的代码,看看会发生什么,但它没有编译,而且缺少那么多我无法轻易解决的问题。