3

我的 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>

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

“您好,我的名字是 ABC,我的姓氏是 XYZ”。

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

“你好,我的名字是,我的姓是”。

无论如何我可以得到子标签的位置/分隔它们,这样即使是手动变量插入也可以在以后完成?

4

2 回答 2

1

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

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

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

note片段未优化。更多地将其视为 PoC。

于 2015-04-24T11:07:28.460 回答
0

在 JDOM 中指定 getText 以返回元素的直接 Text 内容。JDOM 也getValue()返回的方法:

返回此元素的 XPath 1.0 字符串值,它是此元素的所有文本节点后代的完整、有序的内容(即,在解析所有引用并删除所有其他标记后留下的文本。)

将此应用于您的文档:

    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
于 2015-04-24T12:15:47.200 回答