java - XPath 连接相同的标记名
问题描述
我正在尝试根据给定的、连接相同 TagName 的值来生成一个 xml。例如,这是我到目前为止所做的:
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathExpression;
import javax.xml.xpath.XPathExpressionException;
import javax.xml.xpath.XPathFactory;
import org.w3c.dom.Document;
import org.xml.sax.SAXException;
public class TestXPath {
public static void main(String[] args) throws SAXException, IOException, ParserConfigurationException, XPathExpressionException {
String xml =
"<ROOT>" +
" <coolnessId>9</coolnessId>" +
" <cars id=\"3\">0</cars>" +
" <cars id=\"2\">1</cars>" +
" <cars id=\"1\">2</cars>" +
"</ROOT>";
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setNamespaceAware(true);
Document doc = factory.newDocumentBuilder().parse(new ByteArrayInputStream(xml.getBytes(StandardCharsets.UTF_8)));
XPath xpath = XPathFactory.newInstance().newXPath();
///XPathExpression expr = xpath.compile("concat(//ROOT/cars,'-',//ROOT/coolnessId)");//concat(//ROOT/cars)
XPathExpression expr = xpath.compile("concat(//ROOT/cars,'-')");//concat(//ROOT/cars)
// XPathExpression expr = xpath.compile( "concat(//*[contains(name(), 'cars')],'')");
System.out.println(expr.evaluate(doc, XPathConstants.STRING));
}
}
此代码产生:
0-
现在这应该是:
2-1-0
如您所见,这些值遵循每个“汽车”标签的属性“id”。我已经多次重蹈覆辙,但无法达到我的结果。请记住,我使用的是非常古老的环境,例如 Java 1.4 运行时。
解决方案
我认为最简单的方法是使用 XPath 检索节点,然后在 Java 代码中连接字符串值。
任何其他解决方案都涉及升级您的技术:XSLT、XPath 2.0+ 等,而这在 JDK 1.4 平台上并不容易。
推荐阅读
- javascript - 使用函数组件,如何使用按钮更改已渲染到 DOM 的元素?
- php - CodeIgniter 在将网站从一个域迁移到另一个域并托管时不加载 CSS 和 JS
- javascript - 删除数组中包含的所有类而不使用循环
- android - 无法创建 HttpRequestClient
- scala - 带有 IntelliJ 和 SBT 的自定义文件夹结构的 Uber jar
- oracle-service-cloud - 如何在 Oracle 服务云中查询数据库字典表 (Oracle RightNow)
- reactjs - react + asp.net core 独立项目托管(部署)建议
- html - #section 在页面顶部时显示元素
- django - 如何设置 success_url 以重定向回与 UpdateView 中引用的模型不同的模型?
- java - 如何在 Java 中创建单个代码函数以多次运行它?