在Java中如何在没有特定节点的情况下读写XML文件

在Java中如何在没有特定节点的情况下读写XML文件,java,xml,parsing,dom,xpath,Java,Xml,Parsing,Dom,Xpath,我试图读取一个XML文件并编写一个没有第一个节点(根元素)和第二个节点的新XML文件。 这里有一个例子 我得到了这个:afile.xml <soap:Envelope> <soap:Body> <note> <to>Tove</to> <from>Jani</from> <heading>Reminder</heading> <b

我试图读取一个XML文件并编写一个没有第一个节点(根元素)和第二个节点的新XML文件。 这里有一个例子

我得到了这个:afile.xml

<soap:Envelope>
 <soap:Body>
  <note>
      <to>Tove</to>
      <from>Jani</from>
      <heading>Reminder</heading>
      <body>Don't forget me this weekend!</body>
  </note>
  </soap:Body>
</soap:Envelope>

托弗
贾尼
提醒
这个周末别忘了我!
想要这个:bfile.xml

<note>
  <to>Tove</to>
  <from>Jani</from>
  <heading>Reminder</heading>
  <body>Don't forget me this weekend!</body>
</note>

托弗
贾尼
提醒
这个周末别忘了我!

一种方法是使用XSLT,例如XSLT2.0可以通过一个简单的样式表来实现

<xsl:stylesheet
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  version="2.0">

<xsl:template match="/">
  <xsl:copy-of select="//note" copy-namespaces="no"/>
</xsl:template>

</xsl:stylesheet>

您需要使用XSLT2.0处理器(如Saxon 9)来运行上面给出的代码

如果您不知道要复制的元素的名称,则应使用
而不是

尝试以下操作

import java.util.Map;

import cjm.component.cb.map.ToMap;
import cjm.component.cb.xml.ToXML;

public class NoteExtract
{
public static void main(String[] args)
{
    try
    {
        String xml = "<soap:Envelope><soap:Body><note><to>Tove</to><from>Jani</from><heading>Reminder</heading><body>Don't forget me this weekend!</body></note></soap:Body></soap:Envelope>";

        Map<String, Object> map = new ToMap().convertToMap(xml);

        Map<String, Object> mapEnvelope = (Map<String, Object>) map.get("soap:Envelope");

        Map<String, Object> mapBody = (Map<String, Object>) mapEnvelope.get("soap:Body");

        String extractedXML = (new ToXML().convertToXML(mapBody, true)).toString();

        System.out.println("Extracted XML: " + extractedXML);
    }
    catch (Exception e)
    {
        e.printStackTrace();
    }
}
}
import java.util.Map;
导入cjm.component.cb.map.ToMap;
导入cjm.component.cb.xml.ToXML;
公共类注释摘录
{
公共静态void main(字符串[]args)
{
尝试
{
String xml=“ToveJaniReminderDon这个周末别忘了我!”;
Map Map=newtomap().convertToMap(xml);
Map mapevelope=(Map)Map.get(“soap:Envelope”);
Map mapBody=(Map)mapevelope.get(“soap:Body”);
String extractedXML=(new-ToXML().convertoxml(mapBody,true)).toString();
System.out.println(“提取的XML:+extractedXML”);
}
捕获(例外e)
{
e、 printStackTrace();
}
}
}
输出:

 -------- XML Detected -------- 
 -------- Map created Successfully -------- 
 -------- Map Detected -------- 
 -------- XML created Successfully -------- 
Extracted XML: <note><to>Tove</to><body>Don't forget me this weekend!</body><from>Jani</from><heading>Reminder</heading></note>
-----------检测到XML-----------
--------已成功创建映射--------
--------检测到地图--------
--------已成功创建XML--------
提取的XML:ToveDon这个周末别忘了我!JaniReminder

获取此文件的JAR…

您可以使用XPath提取并将其写入bfile.xml