如何使用 jdom2 从 children XML 标签中获取内部文本?

How to get inner text from children XML tags using jdom2?

我的 XML 文件结构如下:

<parent xml:space="preserve">
Hello, my name is
    <variable type="firstname">ABC</variable>
and my last name is 
    <variable type="lastname">XYZ</variable>
</parent>

我需要一种方法来获得这种格式的文本输出:

"Hello, my name is ABC and my last name is XYZ".

现在使用 jdom2 的问题是 element.getText() 方法 returns 整个字符串作为单个字符串(不考虑 child 标签的位置):

"Hello, my name is and my last name is".

我有没有办法得到 child tags/delimit 它们的位置,这样以后甚至可以手动插入变量?

编辑 该示例使用 Java 运行时 API 中包含的 Xerces 解析器 DOM。对于 JDOM2 解决方案,请参阅 rofl.

的答案

您可以使用以下代码段作为起点。根据你真正想要实现的改变需要你自己来完成。

xml = "<parent xml:space=\"preserve\">\n"
        + "Hello, my name is\n"
        + "    <variable type=\"firstname\">ABC</variable>\n"
        + "and my last name is \n"
        + "    <variable type=\"lastname\">XYZ</variable>\n"
        + "</parent>";

DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
Document document = builder.parse(new ByteArrayInputStream(xml.getBytes()));
XPath xPath = XPathFactory.newInstance().newXPath();
NodeList nodeList = (NodeList) xPath.compile("//parent").evaluate(document, XPathConstants.NODESET);
for (int i = 0; i < nodeList.getLength(); i++) {
    System.out.println(nodeList.item(i).getTextContent());
}

输出

Hello, my name is
    ABC
and my last name is 
    XYZ

注意 代码段未优化。将其更多地视为 PoC。

getText 在JDOM 中指定为return 元素的直接Text 内容。 JDOM 还 has the method getValue() 其中 returns:

Returns the XPath 1.0 string value of this element, which is the complete, ordered content of all text node descendants of this element (i.e. the text that's left after all references are resolved and all other markup is stripped out.)

将此应用于您的文档:

    Document doc = new SAXBuilder().build("parentwtext.xml");
    Element root = doc.getRootElement();
    System.out.println(root.getValue());

我得到了输出(开头有一个空行我不能在这里显示):

Hello, my name is
    ABC
and my last name is 
    XYZ