Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.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从xml文件中删除与属性名称匹配的所有xml属性?_Java_Xml - Fatal编程技术网

使用Java从xml文件中删除与属性名称匹配的所有xml属性?

使用Java从xml文件中删除与属性名称匹配的所有xml属性?,java,xml,Java,Xml,我试图使用Java从xml文件中删除与属性名称匹配的所有xml属性。我被困在这一点上。在这段代码的底部,我能够在循环时获得每个节点的属性值,但我不知道如何从节点中完全删除属性。有什么想法吗 import java.io.IOException; import java.io.StringWriter; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import

我试图使用Java从xml文件中删除与属性名称匹配的所有xml属性。我被困在这一点上。在这段代码的底部,我能够在循环时获得每个节点的属性值,但我不知道如何从节点中完全删除属性。有什么想法吗

import java.io.IOException;
import java.io.StringWriter;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.TransformerFactoryConfigurationError;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;

import org.w3c.dom.*;
import org.xml.sax.SAXException;


public class StripAttribute { 

  public static void main(String[] args) { 

    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 
    factory.setNamespaceAware(true); 
    org.w3c.dom.Document doc = null;
    NodeList nodes = null;
    try {
      DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();  
      DocumentBuilder db = dbf.newDocumentBuilder(); 
      doc = db.parse("a.xml");
      nodes = doc.getChildNodes();
    }  catch (IOException e) {
      e.printStackTrace();
    } catch (ParserConfigurationException e) {
      e.printStackTrace();
    } catch (SAXException e) {
      e.printStackTrace();
    }
    for ( int i = 0; i < nodes.getLength(); i++ ) { 
      String id = nodes.item(i).getNodeValue();
      if ( id.equals("siteKey")) {
        Element el = ((Attr) nodes.item(i)).getOwnerElement(); 
        el.removeAttribute(id);
      }
    } 

    Transformer transformer;
    StreamResult result = null;
    try {
      transformer = TransformerFactory.newInstance().newTransformer();
      transformer.setOutputProperty(OutputKeys.INDENT, "yes");
      result = new StreamResult(new StringWriter()); 
      DOMSource source = new DOMSource(doc); 
      transformer.transform(source, result); 
    } catch (TransformerConfigurationException e) {
      e.printStackTrace();
    } catch (TransformerFactoryConfigurationError e) {
      e.printStackTrace();
    } catch (TransformerException e) {
      e.printStackTrace();
    } 
    String xmlString = result.getWriter().toString(); 
    System.out.println(xmlString); 
  } 
}    
import java.io.IOException;
导入java.io.StringWriter;
导入javax.xml.parsers.DocumentBuilder;
导入javax.xml.parsers.DocumentBuilderFactory;
导入javax.xml.parsers.parserConfiguration异常;
导入javax.xml.transform.OutputKeys;
导入javax.xml.transform.Transformer;
导入javax.xml.transform.TransformerConfiguration异常;
导入javax.xml.transform.TransformerException;
导入javax.xml.transform.TransformerFactory;
导入javax.xml.transform.TransformerFactoryConfigurationError;
导入javax.xml.transform.dom.DOMSource;
导入javax.xml.transform.stream.StreamResult;
导入org.w3c.dom.*;
导入org.xml.sax.SAXException;
公共类StripAttribute{
公共静态void main(字符串[]args){
DocumentBuilderFactory工厂=DocumentBuilderFactory.newInstance();
factory.setNamespaceAware(true);
org.w3c.dom.Document doc=null;
NodeList节点=null;
试一试{
DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();
DocumentBuilder db=dbf.newDocumentBuilder();
doc=db.parse(“a.xml”);
nodes=doc.getChildNodes();
}捕获(IOE异常){
e、 printStackTrace();
}捕获(ParserConfiguration异常e){
e、 printStackTrace();
}捕获(SAXE异常){
e、 printStackTrace();
}
对于(inti=0;i
下面是我要转换的XML示例:

试试:

for ( int i = 0; i < nodes.getLength(); i++ ) { 
    String id = nodes.item(i).getNodeValue();
    if ( id.equals("siteKey")) {
        //doc.removeChild(nodes.item(i));
        Element el = ((Attr) nodes.item(i)).getOwnerElement(); 
        el.removeAttribute(id);
    }
} 
更新:

for (int i = 0; i < nodes.getLength(); i++) {
    String id = nodes.item(i).getNodeValue();
    Element el = ((Attr) nodes.item(i)).getOwnerElement();
    el.removeAttribute(id);
}
for(int i=0;i
以下是解决问题的最终代码:

import java.io.File;
import java.io.IOException;
import java.io.StringWriter;
import java.util.HashSet;
import java.util.Set;

import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.TransformerFactoryConfigurationError;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathExpression;
import javax.xml.xpath.XPathExpressionException;
import javax.xml.xpath.XPathFactory;

import org.w3c.dom.*;
import org.xml.sax.SAXException;


public class StripAttributes { 

    public static void main(String[] args) throws Exception {

        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        factory.setNamespaceAware(true);
        Document doc = null;
        NodeList nodes = null;
        Set<String> ids = null;
        try {
            doc = factory.newDocumentBuilder().parse(new File("a.xml"));

            XPathExpression expr = XPathFactory.newInstance().newXPath()
                    .compile("//@siteKey");
            ids = new HashSet<String>();
            nodes = (NodeList) expr.evaluate(doc, XPathConstants.NODESET);
        } catch (SAXException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (ParserConfigurationException e) {
            e.printStackTrace();
        } catch (XPathExpressionException e) {
            e.printStackTrace();
        }

        for (int i = 0; i < nodes.getLength(); i++) {
            System.out.println("."); //progress indicator
            Element el = ((Attr) nodes.item(i)).getOwnerElement();
            if ( el.hasAttribute("siteKey") ) el.removeAttribute("siteKey");
        }

        int dupes = 0;
        for (int i = 0; i < nodes.getLength(); i++) {
            String id = nodes.item(i).getNodeValue();
            if (ids.contains(id)) {
                System.out.format("%s is duplicate\n\n", id);
                dupes++;
            } else {
                ids.add(id);
            }
        }

        System.out.format("Total ids = %d\n Total Duplicates = %d\n", ids
                .size(), dupes);

        Transformer transformer;
        StreamResult result = null;
        try {
            transformer = TransformerFactory.newInstance().newTransformer();
            transformer.setOutputProperty(OutputKeys.INDENT, "yes");
            result = new StreamResult(new StringWriter());
            DOMSource source = new DOMSource(doc);
            transformer.transform(source, result);
        } catch (TransformerConfigurationException e) {
            e.printStackTrace();
        } catch (TransformerFactoryConfigurationError e) {
            e.printStackTrace();
        } catch (TransformerException e) {
            e.printStackTrace();
        }

        String xmlString = result.getWriter().toString();
        System.out.println(xmlString);

    } 
}    
导入java.io.File;
导入java.io.IOException;
导入java.io.StringWriter;
导入java.util.HashSet;
导入java.util.Set;
导入javax.xml.parsers.DocumentBuilderFactory;
导入javax.xml.parsers.parserConfiguration异常;
导入javax.xml.transform.OutputKeys;
导入javax.xml.transform.Transformer;
导入javax.xml.transform.TransformerConfiguration异常;
导入javax.xml.transform.TransformerException;
导入javax.xml.transform.TransformerFactory;
导入javax.xml.transform.TransformerFactoryConfigurationError;
导入javax.xml.transform.dom.DOMSource;
导入javax.xml.transform.stream.StreamResult;
导入javax.xml.xpath.XPathConstants;
导入javax.xml.xpath.XPathExpression;
导入javax.xml.xpath.XPathExpressionException;
导入javax.xml.xpath.XPathFactory;
导入org.w3c.dom.*;
导入org.xml.sax.SAXException;
公共类属性{
公共静态void main(字符串[]args)引发异常{
DocumentBuilderFactory工厂=DocumentBuilderFactory.newInstance();
factory.setNamespaceAware(true);
单据单据=空;
NodeList节点=null;
设置id=null;
试一试{
doc=factory.newDocumentBuilder().parse(新文件(“a.xml”);
XPathExpression expr=XPathFactory.newInstance().newXPath()
.编译(“/@siteKey”);
ids=新的HashSet();
nodes=(NodeList)expr.evaluate(doc,XPathConstants.NODESET);
}捕获(SAXE异常){
e、 printStackTrace();
}捕获(IOE异常){
e、 printStackTrace();
}捕获(ParserConfiguration异常e){
e、 printStackTrace();
}捕获(XPathExpressionException e){
e、 printStackTrace();
}
对于(int i=0;iimport java.io.File;
import java.io.IOException;
import java.io.StringWriter;
import java.util.HashSet;
import java.util.Set;

import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.TransformerFactoryConfigurationError;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathExpression;
import javax.xml.xpath.XPathExpressionException;
import javax.xml.xpath.XPathFactory;

import org.w3c.dom.*;
import org.xml.sax.SAXException;


public class StripAttributes { 

    public static void main(String[] args) throws Exception {

        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        factory.setNamespaceAware(true);
        Document doc = null;
        NodeList nodes = null;
        Set<String> ids = null;
        try {
            doc = factory.newDocumentBuilder().parse(new File("a.xml"));

            XPathExpression expr = XPathFactory.newInstance().newXPath()
                    .compile("//@siteKey");
            ids = new HashSet<String>();
            nodes = (NodeList) expr.evaluate(doc, XPathConstants.NODESET);
        } catch (SAXException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (ParserConfigurationException e) {
            e.printStackTrace();
        } catch (XPathExpressionException e) {
            e.printStackTrace();
        }

        for (int i = 0; i < nodes.getLength(); i++) {
            System.out.println("."); //progress indicator
            Element el = ((Attr) nodes.item(i)).getOwnerElement();
            if ( el.hasAttribute("siteKey") ) el.removeAttribute("siteKey");
        }

        int dupes = 0;
        for (int i = 0; i < nodes.getLength(); i++) {
            String id = nodes.item(i).getNodeValue();
            if (ids.contains(id)) {
                System.out.format("%s is duplicate\n\n", id);
                dupes++;
            } else {
                ids.add(id);
            }
        }

        System.out.format("Total ids = %d\n Total Duplicates = %d\n", ids
                .size(), dupes);

        Transformer transformer;
        StreamResult result = null;
        try {
            transformer = TransformerFactory.newInstance().newTransformer();
            transformer.setOutputProperty(OutputKeys.INDENT, "yes");
            result = new StreamResult(new StringWriter());
            DOMSource source = new DOMSource(doc);
            transformer.transform(source, result);
        } catch (TransformerConfigurationException e) {
            e.printStackTrace();
        } catch (TransformerFactoryConfigurationError e) {
            e.printStackTrace();
        } catch (TransformerException e) {
            e.printStackTrace();
        }

        String xmlString = result.getWriter().toString();
        System.out.println(xmlString);

    } 
}    
NamedNodeMap attributes = node.getAttributes();
attributes.removeNamedItem(attName);