gpt4 book ai didi

java - 具有不同命名空间的 XML 可以深入了解所需的值

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

我试图弄清楚如何从以下 XML 文件中获取 jxdm:ID 的值:

<?xml version="1.0" encoding="UTF-8" standalone="no" ?> 
<My:Message
xmlns:Abcd="http://...."
xmlns:box-1="http://...."
xmlns:bulb="http://...."
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xsi:schemaLocation="http://....stores.xsd">
<Abcd:StoreDataSection>
<Abcd:DataSection>
<Abcd:FirstStore>
<box-1:Response>
<box-1:DataSection>
<box-1:Release>
<box-1:Activity>
<bulb:Date>2017-04-29</bulb:Date>
<bulb:Store xsi:type="TPIR:Organization">
<bulb:StoreID>
<bulb:ID>D79G2102</bulb:ID>
</bulb:StoreID>
</bulb:Store>
</box-1:Activity>
</box-1:Release>
</box-1:DataSection>
</box-1:Response>
</Abcd:FirstStore>
</Abcd:DataSection>
</Abcd:StoreDataSection>
</ My:Message>

我不断得到“null”作为节点的值

Node node = (Node) xPath.evaluate(expression, document, XPathConstants.NODE);

这是我当前的 Java 代码:

try {
DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = builderFactory.newDocumentBuilder();
Document document = builder.parse(new File("c:/temp/testingNamespace.xml"));

XPath xPath = XPathFactory.newInstance().newXPath();
String expression = "//My/Message//Abcd/StoreDataSection/DataSection/FirstStore//box-1/Response/DataSection/Release/Activity//bulb/Store/StoreID/ID";
Node node = (Node) xPath.evaluate(expression, document, XPathConstants.NODE);

node.setTextContent("changed ID");

Transformer transformer = TransformerFactory.newInstance().newTransformer();
transformer.transform(new DOMSource(document), new StreamResult(new File("C:/temp/test-updated.xml")));
} catch (Exception e) {
System.out.println(e.getMessage());
}

如何设置正确的 XPath 格式以便我获取该值并更改它?

更新1

所以是这样的吗?

String expression = "/My:Message/Abcd:StoreDataSection/Abcd:DataSection/Abcd:FirstStore/box-1:Response/box-1:DataSection/box-1:Release/box-1:Activity/bulb:Store/bulb:StoreID/bulb:ID";

最佳答案

问题是您应该通过前缀(如果您愿意)但以不同的方式访问 Node,例如,如果您想访问 StorID,例如://bulb:StoreID

话又说回来,它仍然无法工作,因为您需要告诉 XPath 如何解析命名空间前缀。

您应该检查这个答案:How to query XML using namespaces in Java with XPath?有关如何实现和使用 NamespaceContext 的详细信息。

底线是您需要实现 javax.xml.namespace.NamespaceContext 并将其设置为 XPath。

        XPath xpath = XPathFactory.newInstance().newXPath();
NamespaceContext context = new MyNamespaceContext();

xpath.setNamespaceContext(context);

关于java - 具有不同命名空间的 XML 可以深入了解所需的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59359967/

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