gpt4 book ai didi

java - 如何使用 Java 获取 xml 中元素的第 N 个父元素

转载 作者:行者123 更新时间:2023-12-02 12:56:21 26 4
gpt4 key购买 nike

我正在使用 w3c dom 库来解析 XML。这里我需要 element 的第三个父元素。例如,在下面的 XML 中我使用 element.getParentNode()

输入 XML

<abc cd="1">
<weather module_id="0" tab_id="0" mobile_row="0" mobile_zipped="1" row="0" section="0">
<current_conditions>
<condition data="Clear">
<item abc ="1" />
</condition>
<temp_f data="49"/>
<temp_c data="9"/>
</current_conditions>
</weather>
</abc>

我有 Element eleItem=/item 并且必须到达父 /weather 我正在这样做:

(Element) eleItem.getParentNode().getParentNode().getParentNode();

是否还有其他方法或使用xpath,因为这似乎不是正确的方法?类似于getXPathParent(eleItem, "../../..")

最佳答案

你就快到了。您可以使用 java 的 XPathFactory ,如下所示:

DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setNamespaceAware(true);
DocumentBuilder db = dbf.newDocumentBuilder();

Document doc = db.parse( new File( "input.xml" ) );

XPathFactory xPathFactory = XPathFactory.newInstance();
XPath xpath = xPathFactory.newXPath();

XPathExpression expr = xpath.compile ( "//item/../../..");


Object exprValue = expr.evaluate( doc, XPathConstants.NODE );

if ( exprValue != null && exprValue instanceof Node )
{
Node weatherNode = (Node)exprValue;

System.out.println( weatherNode.getNodeName() );
}

它是如何工作的?xpath //item/../../.. 递归地搜索元素 item 并获取其第三级父元素。

evaluate 中的 XPathConstants.NODE 告诉 Java XPath 引擎将其作为 Node 进行检索。

输出将是:

天气

编辑: - 如果您有一个元素作为输入:

以下代码应给出第三个父级,其中元素为 item

public Node getParentNodeUsingXPath( Element element )
{
Node parentNode = null;
XPathFactory xPathFactory = XPathFactory.newInstance();
XPath xpath = xPathFactory.newXPath();

String nodeName = element.getNodeName();

String expression = "//" + nodeName + "/../../..";

Object obj = xpath.evaluate(expression, element, XPathConstants.NODE );
if ( obj != null )
{
parentNode = (Node)obj;
}

return parentNode;
}

关于java - 如何使用 Java 获取 xml 中元素的第 N 个父元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44416956/

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