【问题标题】:Parsing XML string using DOM parser returns null使用 DOM 解析器解析 XML 字符串返回 null
【发布时间】:2025-12-24 07:20:09
【问题描述】:

我正在尝试从作为字符串从 DB 中检索的 XML 字符串中获取嵌套的子值(无法修改此步骤)。无论我做什么,属性值都会返回为空。我需要 fbw 和 bbw 标签的字符串值。

我尝试了getElementsByTagName 的所有不同组合。他们都返回null

String xml = "<?xml version=\"1.0\" encoding = \"UTF-8\" standalone = \"yes\"?><imageresponse><id>123</id><fbw>FWB</fbw><bbw>BBW</bbw></imageresponse>"

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.parse(new InputSource(new StringReader(xml)));
NodeList nodeList = doc.getElementsByTagName("imageresponse/fbw");```


这是xml:

<?xml version="1.0" encoding = "UTF-8" standalone = "yes"?>
<imageresponse>
    <id>123</id>
    <fbw>FWB</fbw>
    <bbw>BBW</bbw>
</imageresponse>

【问题讨论】:

  • 如果路径无关紧要并且您只需要fbw 元素,您可以使用getElementsByTagName("fbw") 获取正确的元素。否则,您将不得不使用 XPath 之类的东西(请参阅 @omoshiroiii 答案)

标签: java xml dom


【解决方案1】:

我从未亲眼见过 xpath 与 getElementsByTagName 一起使用,但我见过它与 xPath 类一起使用。

    XPath xPather = XPathFactory.newInstance().newXPath();

    String expression = "/imageresponse/fbw";
    NodeList nodeList = (NodeList) xPather.compile(expression).evaluate(doc, XPathConstants.NODESET);

如果你想同时获得 fwb 和 bbw 标签:

String expression = "/imageresponse/fbw | /imageresponse/bbw";

【讨论】: