用Java获取XML中标记的属性值

用Java获取XML中标记的属性值,java,xml,transformer,Java,Xml,Transformer,我正在尝试用Java将text2替换为其他内容。我在使用此代码时遇到问题: try { String filepath = "c:\\path\\file.xml"; DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance(); DocumentBuilder docBuilder = docFactory.newDocumentBuilder(); Document doc =

我正在尝试用Java将text2替换为其他内容。我在使用此代码时遇到问题:

try {
    String filepath = "c:\\path\\file.xml";
    DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
    DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
    Document doc = docBuilder.parse(filepath);
    Node a = doc.getFirstChild();
    Node b = doc.getElementsByTagName("b").item(0);
    NodeList list = b.getChildNodes();

    for (int i = 0; i < list.getLength(); i++) {

               Node node = list.item(i);
       if ("c".equals(node.getNodeName())) { //Want to add '&& attribute value of key is 4'
        node.setTextContent("new text");
       }

    }

    // write the content into xml file
    TransformerFactory transformerFactory = TransformerFactory.newInstance();
    Transformer transformer = transformerFactory.newTransformer();
    DOMSource source = new DOMSource(doc);
    StreamResult result = new StreamResult(new File(filepath));
    transformer.transform(source, result);

    System.out.println("Done");

   } catch (ParserConfigurationException pce) {
    pce.printStackTrace();
   } catch (TransformerException tfe) {
    tfe.printStackTrace();
   } catch (IOException ioe) {
    ioe.printStackTrace();
   } catch (SAXException sae) {
    sae.printStackTrace();
   }
试试看{
String filepath=“c:\\path\\file.xml”;
DocumentBuilderFactory docFactory=DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder=docFactory.newDocumentBuilder();
Document doc=docBuilder.parse(文件路径);
节点a=doc.getFirstChild();
节点b=doc.getElementsByTagName(“b”)。项(0);
NodeList list=b.getChildNodes();
对于(int i=0;i
这就是XML的外观:

<?xml version="1.0" encoding="utf-8">
<a>
    <b id="1">
        <c key="3">text1</c>
        <c key="4">text2</c> //Replace this
    </b>
    <b id="2">
        <c key="5">text3</c>
        <c key="6">text4</c>
    </b>
</a>


并且目前在这一行
transformer.transform(源、结果)上给了我一个错误

对于这样简单的事情,您可以使用XPath,表达式为
“//c[@key='4']]”
,这意味着:在任何级别查找名为
key
的属性值为
4
元素

Document doc=DocumentBuilderFactory.newInstance()
.newDocumentBuilder()
.parse(“file.xml”);
节点c4=(节点)XPathFactory.newInstance()
.newXPath()
.evaluate(“/c[@key='4']”,doc,XPathConstants.NODE);
c4.内容(“新文本”);
TransformerFactory.newInstance()
.新变压器()
.transform(新DOMSource(doc),
新的StreamResult(System.out));
输出


文本1
新文本
文本3
文本4