【问题标题】:Is there any way to Write XML the same way how we are reading using XPath?有没有办法像我们使用 XPath 读取一样来编写 XML?
【发布时间】:2018-10-20 04:02:32
【问题描述】:

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

    <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。

【问题讨论】:

    标签: java xml xpath xlink


    【解决方案1】:

    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 年没有使用过这些了,所以我对语法有点生疏。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-10-21
      • 1970-01-01
      • 1970-01-01
      • 2022-12-10
      • 2014-08-15
      • 1970-01-01
      • 2013-09-25
      相关资源
      最近更新 更多