Java XML在节点上保留选项卡

时间:2017-11-12 19:44:55

标签: java xml

我正在努力用可变字段和节点解析XML文档。 我要么从一个丛中的子节点获取所有数据,要么根本没有。

想象一下这个XML文档

<?xml version="1.0" encoding="UTF-8"?>
<GreatGrandParent id="123456" version="5">
    <GrandParent1>
        <Parent1>
            <Child1>Text1</Child1>                 
            <Child2>Text2</Child2>
            <Child3>Text3</Child3>
        </Parent1>
        <Parent2>
            <Child1 name="something" from="0" to="999" /> 
            <Child2 name="something" from="0" to="999" />
        </Parent2>
    </GrandParent1>
<GrandParent2>
    <Parent1 id="something else" minv="0" maxv="999" name="name1"/> 
</GrandParent2>
</GreatGrandParent>

我只对标签之间带有属性或文字的行感兴趣,但想要识别父母/祖父母等。我知道这很令人困惑,但请耐心等待。使用上面的示例,我希望Java生成以下输出:

GreatGrandParent.id="123456"
GreatGrandParent.version="5"
GreatGrandParent.GrandParent1.Parent1.Child1 = "Text1"
GreatGrandParent.GrandParent1.Parent1.Child2 = "Text2"
GreatGrandParent.GrandParent1.Parent1.Child3 = "Text3"
GreatGrandParent.GrandParent1.Parent2.Child1.Name="Something"
GreatGrandParent.GrandParent1.Parent2.Child1.from="0"
GreatGrandParent.GrandParent1.Parent2.Child1.to="999"
etc....

节点名称可能有所不同,并且不一定遵循这种模式,但我试图解释我追求的是什么。

我可以通过将文件作为文本读取并逐个扫描每一行来实现这一点,但这不是特别优雅或更好,因为字段可能变化很大,我不知道在处理我是哪个字段之前要获得或者该字段与之前和之后的关系是什么,这会导致难以调试的复杂代码。

我不是在寻找一个正确方向指针的解决方案。互联网上的许多例子都基于静态结构,并且知道哪些字段对我来说是没用的。

我正在寻找与https://www.mkyong.com/java/how-to-read-xml-file-in-java-dom-parser/上MKYung的想法相似的东西 - 特别是循环节点部分,它确实参与其中,但是,代码转储了很多超级代码,例如父级列出了一个区块中孩子的所有值,这不是我想要的。

有没有人对此提出建议?

1 个答案:

答案 0 :(得分:0)

您可以使用SAX-Parser。在org.xml.sax.helpers.DefaultHandler中,您必须实现startElement()和endElement()。您需要两种方法来保持跟踪实际元素的xpath,并且在startElement()中,您可以检查属性并打印它们。