我的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()方法将整个字符串作为单个字符串返回(不考虑子标记的位置):
“您好,我的名字是,我的姓氏是”。
无论如何,我可以获得子标签的位置/分隔它们,这样即使是手动变量插入也可以在以后的某个时间点完成吗?
答案 0 :(得分:1)
编辑该示例使用Xerces解析器,该解析器包含在DOM的Java运行时API中。对于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
注意该片段未经过优化。将其视为PoC。
答案 1 :(得分:0)
在JDOM中指定getText以返回元素的直接Text内容。 JDOM还has the method 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