如何在java中修改xml标记特定的值?

如何在java中修改xml标记特定的值?,java,xml,edit,Java,Xml,Edit,我是xml新手。我使用了一个xml文件,如下所示: <?xml version="1.0" encoding="UTF-8" ?> - <root> - <key> <Question>Is the color of the car</Question> <Ans>black?</Ans> </key>

我是xml新手。我使用了一个xml文件,如下所示:

<?xml version="1.0" encoding="UTF-8" ?> 
      - <root>
      - <key>
           <Question>Is the color of the car</Question> 
           <Ans>black?</Ans> 
       </key>
     - <key>
           <Question>Is the color of the car</Question> 
           <Ans>black?</Ans> 
       </key>
     - <key>
           <Question>Is the news paper</Question> 
           <Ans>wallstreet?</Ans> 
      </key>
    - <key>
          <Question>fragrance odor</Question> 
          <Ans>Lavendor?</Ans> 
     </key>
   - <key>
          <Question>Is the baggage collector available</Question> 
         <Ans /> 
     </key>
  </root>

- 
- 
这辆车是什么颜色的
黑色
- 
这辆车是什么颜色的
黑色
- 
这是报纸吗
华尔街?
- 
香味
拉文多?
- 
行李员在吗
从上面的xml中,我只想更改

             <Ans>wallstreet?</Ans> as <Ans>WonderWorld</Ans>.
华尔街?作为一个奇妙的世界。 我怎样才能改变华尔街?作为奇妙世界?通过我的java应用程序

我编写了如下所示的java方法:

  public void modifyNodeval(){
 try{
        DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
        DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
        Document doc = docBuilder.parse(new File(path));
        Node nodes1 = doc.getElementsByTagName("*");
        for(int j=0;j<nodes1.getLength();j++)
        {
            //Get the staff element by tag name directly
            Node nodes = doc.getElementsByTagName("key").item(j);
            //loop the staff child node
            NodeList list = nodes.getChildNodes();

            for (int i = 0; i != list.getLength(); ++i)
            {
                Node child = list.item(i);

               if (child.getNodeName().equals("Ans")) {

                   child.getFirstChild().setNodeValue("WonderWorld") ;
                   System.out.println("tag val modified success fuly");
               }

           }
       }
       TransformerFactory transformerFactory = TransformerFactory.newInstance();
       Transformer transformer = transformerFactory.newTransformer();
       DOMSource source = new DOMSource(doc);
       StreamResult result = new StreamResult(path);
       transformer.transform(source, result);
   }
   catch (Exception e) 
   {
       e.printStackTrace();
   }
}
public void modifyNodeval(){
试一试{
DocumentBuilderFactory docFactory=DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder=docFactory.newDocumentBuilder();
Document doc=docBuilder.parse(新文件(路径));
节点nodes1=doc.getElementsByTagName(“*”);
对于(int j=0;j使用

if(child.getNodeName().equals(“Ans”)和&child.getTextContent().equals(“华尔街”)


作为if条件。

您没有检查节点的值是否为“wallstreet?”——因此它只是更改每个第一个子节点

String str = child.getFirstChild( ).getNodeValue( );
if ( "wallstreet?".compareTo( str ) == 0 )
{
    child.getFirstChild( ).setNodeValue( "WonderWorld" );
    System.out.println( "tag val modified success fuly" );
}

我建议XPath以更少的代码选择您想要编辑的内容:

XPath xpath = XPathFactory.newInstance().newXPath();
Element e = (Element) xpath.evaluate("//Ans[. = 'wallstreet']", document, XPathConstant.NODE);
if (e != null)
  e.setTextContent("Wonderland");

到目前为止,你尝试了什么?你有一些代码给我们看吗?而且,如果接受更多的答案,这里的人会更有用。@四十二用我的java代码检查一下,如果我想一次改变黑色?和华尔街?那怎么办?嗯,你不能同时改变两者。只需用另一个表达式重复,或者重构成一个方法。