java - 如何在Java中解析具有混合节点和文本的XML?

标签 java xml xpath xml-parsing

我有一个格式为 xml -

<root>
      <sentence>
           first part of the text 

           <a id="interpolation_1"> </a>

           second part of the text

           <a id="interpolation_2"> </a>
      </sentence>
</root>

本质上,<sentence>标签代表一个句子,子标签<a>是句子中的插值部分。

XPath 表达式 String sentence = xPath.evaluate("sentence", transUnitElement);将文本指定为 - first part of the text second part of the text即它省略了插值。

XPath 表达式 -

NodeList aList = (NodeList) xPath.evaluate("/sentence/a", transUnitElement, XPathConstants.NODESET);给出 <a> 的列表元素。

如何解析它们以获取 <sentence> 的文本元素以及 <a>元素不丢失 <a> 的顺序和位置元素?

预期输出 - the first part of the sentence {interpolation_1} second part of the text {interpolation_2}

最佳答案

您正在寻找的结果可以通过迭代sentence的子节点并逐步构建目标字符串来实现。例如:

// retrieve <sentence> as Node, not as text
Node sentence = (Node) xPath.evaluate("sentence", transUnitElement, XPathConstants.NODE);

StringBuilder resultBuilder = new StringBuilder();
NodeList children = sentence.getChildNodes();

for (int i = 0; i < children.getLength(); i++) {
  Node child = children.item(i);
  short nodeType = child.getNodeType();
  switch (nodeType) {
    case Node.TEXT_NODE:
      String text = child.getTextContent().trim();
      resultBuilder.append(text);
      break;
    case Node.ELEMENT_NODE:
      String id = ((Element) child).getAttribute("id");
      resultBuilder.append(" {").append(id).append("} ");
      break;
    default:
      throw new IllegalStateException("Unexpected node type: " + nodeType);
  }
}
// outputs "first part of the text {interpolation_1} second part of the text {interpolation_2}"
System.out.println(resultBuilder.toString());

关于java - 如何在Java中解析具有混合节点和文本的XML?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49183166/

相关文章:

java - 使用 Stream 映射 Collection 结果

java - 在 eclipse luna 中使用 JGit 时出现 NoClassDefFoundError

java - Maven 资源过滤是否支持条件?

xml - 是否可以使用 XSLT 对 XML 文档进行颜色编码和格式化?

javascript - perl 使用 HTML::Treebuilder 查找不同的元素 id

python - 使用selenium webdriver python通过xpath登录jsp表单

java - 从存储库访问 XML 文件时出现问题

java - XmlPullParser - 以 XML 字符串形式获取节点内容

sql - 在 Hive 中,有没有办法解析同一 XML 系列中多次出现的同一标签?

xml - 如何使用XPATH查询以下xml?