Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用javax.xml.transform.Transformer对漂亮打印的xml属性排序_Java_Xml_Pretty Print - Fatal编程技术网

使用javax.xml.transform.Transformer对漂亮打印的xml属性排序

使用javax.xml.transform.Transformer对漂亮打印的xml属性排序,java,xml,pretty-print,Java,Xml,Pretty Print,有没有一种方法可以让xml transformer按照字母顺序对给定xml标记的所有属性进行排序?所以让我们说 <MyTag paramter1="lol" andTheOtherThing="potato"/> 会变成 <MyTag andTheOtherThing="potato" paramter1="lol"/> 我从我找到的示例和中了解了如何格式化它,但是对标记属性进行排序将是我遇到的最后一个问题 我希望会有这样的事情: transformer.se

有没有一种方法可以让xml transformer按照字母顺序对给定xml标记的所有属性进行排序?所以让我们说

<MyTag paramter1="lol" andTheOtherThing="potato"/>

会变成

<MyTag andTheOtherThing="potato" paramter1="lol"/>

我从我找到的示例和中了解了如何格式化它,但是对标记属性进行排序将是我遇到的最后一个问题

我希望会有这样的事情:

transformer.setOutputProperty(OutputKeys.INDENT, "yes");
transformer.setOutputProperty(OutputKeys.SORTATT, "yes"); // <-- no such thing
transformer.setOutputProperty(OutputKeys.INDENT,“是”);

transformer.setOutputProperty(OutputKeys.SORTATT,“是”);// 如前所述,到了四十二岁,您可以从XML中生成规范化的XML,这将按字母顺序为您排序属性

在Java中,我们可以使用类似Apache的规范化程序

org.apache.xml.security.c14n.Canonicalizer

类似这样的内容(假设inXMLDoc中的文档已经是DOM):


当然,当规范化时,其他事情也会发生变化(它将成为规范化的XML),所以只需要期待一些变化,而不是属性顺序

如前所述,到了四十二岁,您可以从XML中生成规范的XML,这将按字母顺序为您排序属性

在Java中,我们可以使用类似Apache的规范化程序

org.apache.xml.security.c14n.Canonicalizer

类似这样的内容(假设inXMLDoc中的文档已经是DOM):


当然,当规范化时,其他事情也会发生变化(它将成为规范化的XML),所以只需要期待一些变化,而不是属性顺序

如果您能说服转换器以某种方式使用“规范形式”,属性应该按字母顺序排列。Xerces在其应用程序中对此有支持。这可能是一个开始。如果您能说服转换器以某种方式使用“规范形式”,属性应该按字母顺序排列。Xerces在其应用程序中对此有支持。这可能是一个开始。有趣的是,我把它规范化了,但其中一个定义(来自维基百科)似乎不适用,空标签没有扩展到打开/关闭格式。另外,org.w3c.dom.Document中的
.normalize()
似乎也做了同样的事情。我遗漏了什么吗?对不起,我手边唯一的例子就是使用ApacheLibs,因为我已经用了很多。您也可以将Document.normalizeDocument与一起使用,两者都应符合w3c建议。我不知道为什么它不是扩展元素,它可能是一个需要设置的开关。好的。无论如何,谢谢,我会看一下文档。干杯。有趣的是,我很好地把它规范化了,但是其中一个定义(来自维基百科)似乎不适用,空标签没有扩展到打开/关闭格式。另外,org.w3c.dom.Document中的
.normalize()
似乎也做了同样的事情。我遗漏了什么吗?对不起,我手边唯一的例子就是使用ApacheLibs,因为我已经用了很多。您也可以将Document.normalizeDocument与一起使用,两者都应符合w3c建议。我不知道为什么它不是扩展元素,它可能是一个需要设置的开关。好的。无论如何,谢谢,我会看一下文档。干杯
Document retDoc;
byte[] c14nOutputbytes;
DocumentBuilderFactory factory;
DocumentBuilder parser;

// CANONICALIZE THE ORIGINAL DOM
c14nOutputbytes = Canonicalizer.getInstance(Canonicalizer.ALGO_ID_C14N_WITH_COMMENTS).canonicalizeSubtree(inXMLDoc.getDocumentElement());

// PARSE THE CANONICALIZED BYTES (IF YOU WANT ANOTHER DOM) OR JUST USE THE BYTES
factory = DocumentBuilderFactory.newInstance();
factory.set ... // SETUP THE FACTORY
parser = factory.newDocumentBuilder();
// REPARSE TO GET ANOTHER DOM WITH THE ATTRIBUTES IN ALPHA ORDER
ByteArrayInputStream bais = new ByteArrayInputStream(c14nOutputbytes);
retDoc = parser.parse(bais);