gpt4 book ai didi

java - 有没有办法像我们使用 XPath 读取的方式一样编写 XML?

转载 作者:行者123 更新时间:2023-12-02 10:41:18 24 4
gpt4 key购买 nike

我有一个如下所示的 XML,我正在使用 XPath 读取 XML。由于我知道数据所在的确切位置,因此我将路径动态传递给表达式对象并获取值。

    <MESSAGE xmlns:xlink="http://www.w3.org/1999/xlink">
<ABOUT_VERSIONS>
<ABOUT_VERSION SequenceNumber="1" xlink:label="ASSET_1" >
<CreatedDatetime>2015-08-24T09:30:47Z</CreatedDatetime>
<DataVersionName>Purchase Example</DataVersionName>
</ABOUT_VERSION>
</ABOUT_VERSIONS>
<DEALS>
<DEAL>
<ACCOUNT>
<Name>Test</Name>
</ACCOUNT>
</DEAL>
</DEALS>
</MESSAGE>

我正在使用下面的代码来读取 XML。

XPathFactory xpf = XPathFactory.newInstance();            
XPath xPath = xpf.newXPath();
XPathExpression pathExpression =
xPath.compile("MESSAGE/ABOUT_VERSIONS/ABOUT_VERSION");
InputSource inputSource = new InputSource("C:/Sample.xml");
NodeList Nodes = (NodeList)
xPath.evaluate("MESSAGE/ABOUT_VERSIONS/ABOUT_VERSION", inputSource,
XPathConstants.NODESET);

有没有这种用Java编写XML的方法?稍后我需要编写带有附加标签和额外数据的相同 XML。

最佳答案

XPath 本身是一种模式匹配语言,就像正则表达式一样,因此您不能直接使用它进行操作。但与正则表达式一样,有些引擎允许您使用 XPath 作为更大技术堆栈的一部分来修改文档。

如果您尝试修改现有的 XML 文档,您应该考虑将其作为 DOM 树来读取。然后,您可以使用 XPath 轻松查找要修改的单个节点或节点组。使用 DOM 模型修改它们,然后将其序列化回磁盘。

或者,您可以创建一个 XSLT 表来转换输入。您可以从身份转换开始,如下所示...


<xsl:stylesheet version="3.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>

这将产生与输入文档相同的 XML 输出。然后,您可以开始添加模板来修改与所需 XPath 匹配的特定节点。根据我的经验,这往往比 DOM 操作更难做到,因为通常在 Java 中执行的大多数逻辑现在必须在 XSLT 中执行,它是它自己的语言。然而,由于您可以通过流式处理进行 XSLT 转换,因此,如果您正在处理难以装入内存的非常大的文档,有时会更容易。

我会提供更多细节,但老实说我已经有 6 年没有使用过这些了,所以我对语法有点生疏。

关于java - 有没有办法像我们使用 XPath 读取的方式一样编写 XML?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52902311/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com