gpt4 book ai didi

java - 在 Java 中使用 XPath 将 XML 子项分组在一起

转载 作者:行者123 更新时间:2023-12-01 12:04:41 25 4
gpt4 key购买 nike

我到处寻找,但尚未找到解决我的 Java 问题的方法。

我有一个 xml 文档,其中包含一本书的目录 - 缩写如下。

<TOC>
<USMARC>
<Leader/>
<VarFlds>
<VarCFlds>
<SSIFlds>
<Fld970 I1="0" I2="1">
<t>Acknowledgments</t>
<p>p. ix</p>
</Fld970>
<Fld970 I1="1" I2="1">
<t>Preface: The Generation</t>
<p>p. 3</p>
</Fld970>
<Fld970 I1="1" I2="1">
<l>Chapter 1</l>
<t>The Duel</t>
<p>p. 20</p>
</Fld970>
<Fld970 I1="1" I2="1">
<l>Chapter 2</l>
<t>The Dinner</t>
<p>p. 48</p>
</Fld970>
</SSIFlds>
</VarDFlds>
</VarFlds>
</USMARC>
</Leader>
</TOC>

我需要能够将 XML 解析为如下所示的组:

{[null, Acknowledgments, p. ix],[null, Preface: The Generation, p. 3],[Chapter 1, The Duel, p. 20],[Chapter 2, The Dinner, p. 48]}

(注意,有时子元素 [l] 不存在,应替换为 null)。

目前我有:

 XPathExpression expr = xpath.compile("//TOC//SSIFlds/Fld970//text()");
//evaluate expression result on XML document
NodeList nodes = (NodeList) expr.evaluate(doc, XPathConstants.NODESET);

for (int i = 0; i < nodes.getLength(); i++) {
list.add(nodes.item(i).getNodeValue());
}

但是,当然,这只是抓取(存在的)所有内容并将其放入一个列表中...是否有任何表达式可以像我想要的那样对所有内容进行分组?

最佳答案

您不能使用单个 XPath 1.0 表达式将节点重新排列成组。

您实际上可以做的是选择 Flt970 元素,迭代这些元素,然后获取其中的元素:

XPathExpression expr = xpath.compile("//TOC//SSIFlds/Fld970");
//evaluate expression result on XML document
NodeList nodes = (NodeList) expr.evaluate(doc, XPathConstants.NODESET);

for (int i = 0; i < nodes.getLength(); i++) {
Element node = (Element)nodes.item(i);
String l = getChildValue(node, "l"),
t = getChildValue(node, "t"),
p = getChildValue(node, "p");

// use l, t, and p as needed
}

// defined elsewhere
private static String getChildValue(Element parent, String childName) {
NodeList nodes = parent.getElementsByTagName(childName);
return nodes.getLength() > 0 ? nodes.item(0).getTextContent() : "";
}

关于java - 在 Java 中使用 XPath 将 XML 子项分组在一起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27710973/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com