gpt4 book ai didi

java - 基于XPath DOM修改XML内容

转载 作者:行者123 更新时间:2023-12-01 10:47:38 26 4
gpt4 key购买 nike

我正在尝试根据 XPATH 操作一些基于 XML 的文件。使用 DOM。但我在使用复杂的 XPath 时遇到了问题。

基本上我需要的是更改电子邮件为 xyz@gmail.com 的人名其中 XPath 为//person[email='xyz@gmail.com']/name

<?xml version="1.0" encoding="UTF-8"?>
<details>
<person>
<name>batman</name>
<email>abc@yahoo.com</email>
</person>
<person>
<name>spiderman</name>
<email>xyz@gmail.com</email>
</person>
<person>
<name>tintin</name>
<email>pqr@gmail.com</email>
</person>
</details>

我当前的实现如下

     Node nodeXpath = (Node) xPath.evaluate(<<xpath>>,document.getDocumentElement(), XPathConstants.NODE);
Element element = document.getDocumentElement();
Node tatgetNode = document.importNode(nodeXpath, true);
element.getElementsByTagName(tatgetNode.getNodeName()).item(0).setTextContent("BatMan");

问题是,如果我使用 tagName 找到元素,它会返回 NodeList,其中包含与“name”匹配的所有节点。

有人可以告诉我如何使用 DOM 修改基于 XPath 的 XML 内容吗?

谢谢。

最佳答案

您可以直接更改evaluate()返回的节点的文本内容:

Node nodeXpath = (Node) xPath.evaluate("//person[email='xyz@gmail.com']/name",document, XPathConstants.NODE);
nodeXpath.setTextContent("BatMan");

另一种方法是使用 XSLT:

Transformer t = TransformerFactory.newInstance().newTransformer(new StreamSource("batmanTransform.xsl"));
t.setOutputProperty(OutputKeys.INDENT, "yes");
StreamResult target = new StreamResult(System.out);
t.transform(new DOMSource(document), target);

并在 batmanTransform.xsl 中输入:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">

<xsl:template match="//person[email='xyz@gmail.com']/name">
<name>BatMan</name>
</xsl:template>

<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()" />
</xsl:copy>
</xsl:template>
</xsl:stylesheet>

关于java - 基于XPath DOM修改XML内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34087357/

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