Java 是否有任何方法可以像我们使用XPath阅读一样编写XML?

Java 是否有任何方法可以像我们使用XPath阅读一样编写XML?,java,xml,xpath,xlink,Java,Xml,Xpath,Xlink,我有一个如下所示的XML,我正在使用XPath阅读XML。因为我知道数据的确切位置,所以我将动态地将路径传递给Expression对象并获取值 <MESSAGE xmlns:xlink="http://www.w3.org/1999/xlink"> <ABOUT_VERSIONS> <ABOUT_VERSION SequenceNumber="1" xlink:label="ASSET_1" > <CreatedDate

我有一个如下所示的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>

有没有这种用Java编写XML的方法?以后我需要用额外的标记和数据编写相同的XML。

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

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

或者,您可以创建一个XSLT表来转换输入。你可以从身份转换开始,看起来像这样


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

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

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);