Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用DOM解析器检索包含标记的XML_Java_Xml_Dom_Xml Parsing - Fatal编程技术网

Java 如何使用DOM解析器检索包含标记的XML

Java 如何使用DOM解析器检索包含标记的XML,java,xml,dom,xml-parsing,Java,Xml,Dom,Xml Parsing,我正在使用org.w3c.dom解析XML文件。然后我需要返回特定节点的整个XML,包括标记,而不仅仅是标记的值。我使用节点列表是因为我需要计算文件中有多少条记录。但我还需要从一开始就全面读取该文件,然后将其写入一个新的XML文件。但是我当前的代码只打印节点的值,而不是节点本身。我被难住了 public static void main(String[] args) { try { File fXmlFile = new File (args[0]); D

我正在使用org.w3c.dom解析XML文件。然后我需要返回特定节点的整个XML,包括标记,而不仅仅是标记的值。我使用节点列表是因为我需要计算文件中有多少条记录。但我还需要从一开始就全面读取该文件,然后将其写入一个新的XML文件。但是我当前的代码只打印节点的值,而不是节点本身。我被难住了

public static void main(String[] args) {
    try {
        File fXmlFile = new File (args[0]);
        DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
        DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
        Document doc = dBuilder.parse(fXmlFile);

        System.out.println("Root element :" + doc.getDocumentElement().getNodeName());

        NodeList listOfRecords = doc.getElementsByTagName("record");

        int totalRecords = listOfRecords.getLength();
        System.out.println("Total number of records : " + totalRecords);
        int amountToSplice = queryUser();

        for (int i = 0; i < amountToSplice; i++) {
            String stringNode = listOfRecords.item(i).getTextContent();
            System.out.println(stringNode);
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
}
publicstaticvoidmain(字符串[]args){
试一试{
File fXmlFile=新文件(args[0]);
DocumentBuilderFactory dbFactory=DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder=dbFactory.newDocumentBuilder();
documentdoc=dBuilder.parse(fXmlFile);
System.out.println(“根元素:+doc.getDocumentElement().getNodeName());
NodeList listOfRecords=doc.getElementsByTagName(“记录”);
int totalRecords=listOfRecords.getLength();
System.out.println(“记录总数:“+totalRecords”);
int amountToSplice=queryUser();
for(int i=0;i
将仅“返回此节点及其子节点的文本内容”,即仅获取“文本”类型节点的内容。解析XML时,最好记住有几种不同类型的节点,请参阅

要做你想做的事,你可以创建一个像这样的实用方法

public static String nodeToString(Node node) 
{
  Transformer t = TransformerFactory.newInstance().newTransformer();
  t.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
  t.setOutputProperty(OutputKeys.INDENT, "yes");
  StringWriter sw = new StringWriter();
  t.transform(new DOMSource(node), new StreamResult(sw));
  return sw.toString();
}
for (int i = 0; i < amountToSplice; i++)
  System.out.println(nodeToString(listOfRecords.item(i)));
然后像这样循环打印

public static String nodeToString(Node node) 
{
  Transformer t = TransformerFactory.newInstance().newTransformer();
  t.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
  t.setOutputProperty(OutputKeys.INDENT, "yes");
  StringWriter sw = new StringWriter();
  t.transform(new DOMSource(node), new StreamResult(sw));
  return sw.toString();
}
for (int i = 0; i < amountToSplice; i++)
  System.out.println(nodeToString(listOfRecords.item(i)));
for(int i=0;i