【问题标题】:XOM and Canonical XMLXOM 和规范 XML
【发布时间】:2011-06-16 09:58:39
【问题描述】:

我正在制作一个 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>

如您所见,它再次添​​加了 xml 标记并删除了结束标记 &lt;/b&gt;,因为标记 b 的值为空。 我对 xml 版本标签没有任何问题,但是当我从文件加载规范文档时,我不知道如何保留结束标签 &lt;/b&gt;

【问题讨论】:

    标签: java xml xom


    【解决方案1】:

    看起来您正在输出带有 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);
    
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-01-30
      • 2013-06-17
      • 1970-01-01
      • 2010-11-10
      • 1970-01-01
      • 1970-01-01
      • 2016-02-27
      相关资源
      最近更新 更多