在我已经存储为字符串的复杂 XML 中,我必须进行一些文本/xml 处理。目标是找到某个给定 节点的开始索引。除了节点(节点/元素类引用)我还有关于嵌套的信息:整数数组说明我应该进入哪个子节点。例如。对于数组:
2 1 0
和给定的树
root
|--root-child0
|--root-child1
|--root-child2
|--root-child2-child0
|--root-child2-child1
|--root-child2-child1-child0
我正在搜索 root-child2-child1-child0
有没有干净的可能性找到这样的项目。仅查找字符串 (String.indexOf()) 是不够的 - 在我的 XML 文件中有许多相同的标签。除了这种搜索之外,还有一个额外的困难 - 在一些父标签和子标签之间可以存在一个额外的 (Collection) 标签。 (例如,root-child2 的唯一子项可能是Collection,而 root-child2-child0 和 root-child2-child1 是此Collection 的子项)
--编辑
如果这有帮助 - 除了提到的嵌套信息之外,我还可以让节点名称与我正在搜索的节点路径上的节点相对应。
--编辑2
有了这样的xml文件
<catalog>
<book id="bk101">
<author>Gambardella, Matthew</author>
<title>XML Developer's Guide</title>
<genre>Computer</genre>
</book>
<book id="bk102">
<author>Ralls, Kim</author>
<title>Midnight Rain</title>
<genre>Fantasy</genre>
<price>5.95</price>
</book>
</catalog>
假设我有 Node 对象引用 价格标签的值为 5.95。另外我有关于嵌套的信息:
1 3
说它是目录中的第二本书(从 0 开始计数)和本书的第四个标签 (id="bk102")。
我想要的是得到类似的东西
xmlRawBody.indexOf("<price>5.95</price>").
为什么我不能使用这个简单的方法?因为相同的标签可能会出现在其他地方。我必须使用提到的额外嵌套信息。
最佳答案
我的理解是,您拥有类似 2 1 0
的信息。由此,您为节点 root-child2-child1-chile0
命名。
要像这样获取指定的节点,如果结构是固定的,那么您可以从中创建一个 xpath。
例如,如果您的值是 2 1 0
,那么构建 xpath 就像 root/root-child2/root-child2-child1/root-child2-child1-child0
。您可以使用此 xpath 来获取特定的节点元素。
您可以制作一个 java 函数,它根据给定的值数组相应地准备 xpath。如果你有更多这样的元素,你需要找到一种方法来用 xpath 识别它们。因为 xpath 很容易使用 SAXParser
获取这些值(如果您不想读取整个 xml,只读取部分,则使用 SAXParser
)。
希望这对您有所帮助。
关于java - XML文本处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7117931/