Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.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 使用xpath更新xml文档_Java_Xml_Xpath_Document - Fatal编程技术网

Java 使用xpath更新xml文档

Java 使用xpath更新xml文档,java,xml,xpath,document,Java,Xml,Xpath,Document,您好这是我的xml文档: <city> <beirut> <restaurant> <name>sada</name> </restaurant> </beirut> <jbeil> <restaurant> <name>toto</name> <rating>

您好这是我的xml文档:

<city> 
  <beirut> 
    <restaurant> 
      <name>sada</name> 
    </restaurant> 
  </beirut>  
  <jbeil> 
    <restaurant> 
      <name>toto</name>  
      <rating>4.3/5</rating> 
    </restaurant>  
    <restaurant> 
      <name>jojo</name>  
      <rating>4.3/5</rating> 
    </restaurant> 
  </jbeil>  
  <sour> 
    <restaurant> 
      <name>sada</name> 
    </restaurant> 
  </sour> 
</city>
我想使用xpath和netbeans将jbeil中jojo餐厅的评级从4.3/5更新为4.5/5请帮助

该代码给出了评级

  try {
     File inputFile = new File("src/xpath/josephXml.xml");
     DocumentBuilderFactory dbFactory 
        = DocumentBuilderFactory.newInstance();
     DocumentBuilder dBuilder;

     dBuilder = dbFactory.newDocumentBuilder();

     Document doc = dBuilder.parse(inputFile);
     doc.getDocumentElement().normalize();

     XPath xPath =  XPathFactory.newInstance().newXPath();

     String expression = "/City/Jbeil/Restaurant";          
     NodeList nodeList = (NodeList) xPath.compile(expression).evaluate(doc, XPathConstants.NODESET);
     for (int i = 0; i < nodeList.getLength(); i++) {
        Node nNode = nodeList.item(i);
        System.out.println("\nCurrent Element :" 
           + nNode.getNodeName());
        if (nNode.getNodeType() == Node.ELEMENT_NODE) {
           Element eElement = (Element) nNode;

           System.out.println("rating : " 
              + eElement
                 .getElementsByTagName("rating")
                 .item(0)
                 .getTextContent());

我只想更新jbeil中名为jojo的餐馆的评级,请帮助

这是一种可能的XPath,可以在jbeil市找到名为jojo的餐馆,然后返回相应的评级元素:

/city/jbeil/restaurant[name='jojo']/rating
注意XML和XPath是区分大小写的,所以我在上面的XPath中使用了所有小写字符来匹配这个问题中发布的XML

我对Java了解不多,但通过internet快速搜索*建议如下:

XPath xpath = XPathFactory.newInstance().newXPath();
String expression = "/city/jbeil/restaurant[name='jojo']/rating"; 
Element e = (Element)xpath.evaluate(expression, doc, XPathConstant.NODE);
if (e != null)
  e.setTextContent("4.5/5");

*

@user3630405不客气。你应该开始接受解决问题的答案,请回顾:我在做一个类似的例子。我的实现正在返回一个DeferredTextImpl实例,该实例实际上不能作为元素类型的大小写。然而,对于一个节点来说可能是这样的,它实际上是包含setTextContent方法的接口。如果有人想知道它是哪个节点,它就是org.w3c.dom.Node。