我正在制作一个Java应用程序,用于检查XML文件是否已经Canonical或未使用XOM。

在我的测试中,我有以下已经正常的文件。

<doc xmlns="http://example.com/default" xmlns:x="http://example.com/x">
  <a a1="1" a2="2">123</a>
  <b xmlns:y="http://example.com/y" a3="&quot;3&quot;" y:a1="1" y:a2="2"></b>
</doc>


这是我再次使用XOM加载代码时的代码。

<?xml version="1.0"?>
<doc xmlns="http://example.com/default" xmlns:x="http://example.com/x">
  <a a1="1" a2="2">123</a>
  <b xmlns:y="http://example.com/y" a3="&quot;3&quot;" y:a1="1" y:a2="2" />
</doc>


如您所见,由于标记b的值为空,因此它再次添加了xml标记并删除了结束标记</b>
我对xml版本标签没有任何问题,但是当我从文件加载规范文档时,我不知道该怎么做以保持结束标签</b>

最佳答案

看来您要使用XOM Serializer输出文档,您需要使用XOM Canonicalizer来输出xml文档并保持其规范。

这给出了输出:

<?xml version="1.0" encoding="UTF-8"?>
<doc xmlns="http://example.com/default" xmlns:x="http://example.com/x">
    <a a1="1" a2="2">123</a>
    <b a3="&quot;3&quot;" y:a1="1" y:a2="2" xmlns:y="http://example.com/y"/>
</doc>


以下示例程序将使用XOM Canonicalizer将XML Cannonically输出到System.out。

package com.foo.bar.xom;

import java.io.IOException;

import nu.xom.Builder;
import nu.xom.canonical.Canonicalizer;
import nu.xom.Document;
import nu.xom.ParsingException;
import nu.xom.Serializer;
import nu.xom.ValidityException;

public class App
{
    public static void main(String[] args) throws ValidityException, ParsingException, IOException
    {
        Builder builder = new Builder();
        //Serializer serializer = new Serializer(System.out);
        Canonicalizer canonicalizer = new Canonicalizer(System.out, Canonicalizer.EXCLUSIVE_XML_CANONICALIZATION);
        //this assumes to your xml document is on the classpath in this package as my.xml
        Document input = builder.build(App.class.getResourceAsStream("my.xml"), null);
        //serializer.write(input);
        canonicalizer.write(input);

    }
}

关于java - XOM和规范XML,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6370085/

10-13 09:48