2016-08-19 19 views
1

我试图从嵌套标记中读取值,并且遇到问题。从嵌套标记中获取包含在字符串中的XML值

我的XML文件叫NewFile.xml我想读取tag4中的值。

<?xml version="1.0"?> 
    <tag1> 
     <tag2> 
      <tag3> 
       <tag4>read me</tag4> 
      </tag3> 
     </tag2> 
    </tag1> 

这里是称为Test.java主类读取XML文件,并将其覆羽串并将其发送中读取器类称为lookUpValue的方法。

public class test { 

    public static void main(String [] args) throws IOException, XPathExpressionException 
    { 
     BufferedReader br = new BufferedReader(new FileReader(new File("NewFile.xml"))); 
     String xmlString; 
     StringBuilder sb = new StringBuilder(); 

     while((xmlString=br.readLine())!= null){ 
      sb.append(xmlString.trim()); 
     } 

     xmlString = sb.toString(); 

     System.out.print(reader.LookUpValue(xmlString)); 
     br.close(); 
    } 
} 

这里是读者类和方法LookupValue:

import java.io.StringReader; 

import javax.xml.xpath.XPath; 
import javax.xml.xpath.XPathConstants; 
import javax.xml.xpath.XPathExpressionException; 
import javax.xml.xpath.XPathFactory; 

import org.xml.sax.InputSource; 

public class reader{ 

    public static String LookUpValue(String sb) throws XPathExpressionException 
    { 
     InputSource source = new InputSource(new StringReader(sb)); 
     XPath xpath = XPathFactory.newInstance().newXPath(); 
     Object customer = xpath.evaluate("/tag1/tag2/tag3", source, XPathConstants.NODE); 
     String value = xpath.evaluate("tag4", customer); 

     return ("Value is: " + value); 
    } 
} 

我的问题是我怎么能读取里面TAG4的价值,现在,当我运行这个程序,我得到以下错误。

Exception in thread "main" 
javax.xml.transform.TransformerException: Unable to evaluate expression using this context 
    at com.sun.org.apache.xpath.internal.XPath.execute(XPath.java:363) 
    at com.sun.org.apache.xpath.internal.jaxp.XPathImpl.eval(XPathImpl.java:213) 
    at com.sun.org.apache.xpath.internal.jaxp.XPathImpl.evaluate(XPathImpl.java:275) 
    at com.sun.org.apache.xpath.internal.jaxp.XPathImpl.evaluate(XPathImpl.java:365) 
    at reader.LookUpValue(LookUpValue.java:21) 
    at test.main(test.java:26) 
Caused by: java.lang.RuntimeException: Unable to evaluate expression using this context 
    at com.sun.org.apache.xpath.internal.axes.NodeSequence.setRoot(NodeSequence.java:212) 
    at com.sun.org.apache.xpath.internal.axes.LocPathIterator.execute(LocPathIterator.java:210) 
    at com.sun.org.apache.xpath.internal.XPath.execute(XPath.java:335) 
    ... 5 more 
--------- 
java.lang.RuntimeException: Unable to evaluate expression using this context 
    at com.sun.org.apache.xpath.internal.axes.NodeSequence.setRoot(NodeSequence.java:212) 
    at com.sun.org.apache.xpath.internal.axes.LocPathIterator.execute(LocPathIterator.java:210) 
    at com.sun.org.apache.xpath.internal.XPath.execute(XPath.java:335) 
    at com.sun.org.apache.xpath.internal.jaxp.XPathImpl.eval(XPathImpl.java:213) 
    at com.sun.org.apache.xpath.internal.jaxp.XPathImpl.evaluate(XPathImpl.java:275) 
    at com.sun.org.apache.xpath.internal.jaxp.XPathImpl.evaluate(XPathImpl.java:365) 
    at reader.LookUpValue(LookUpValue.java:21) 
    at test.main(test.java:26) 
--------------- linked to ------------------ 
javax.xml.xpath.XPathExpressionException 
    at com.sun.org.apache.xpath.internal.jaxp.XPathImpl.evaluate(XPathImpl.java:289) 
    at com.sun.org.apache.xpath.internal.jaxp.XPathImpl.evaluate(XPathImpl.java:365) 
    at reader.LookUpValue(LookUpValue.java:21) 
    at test.main(test.java:26) 
Caused by: javax.xml.transform.TransformerException: Unable to evaluate expression using this context 
    at com.sun.org.apache.xpath.internal.XPath.execute(XPath.java:363) 
    at com.sun.org.apache.xpath.internal.jaxp.XPathImpl.eval(XPathImpl.java:213) 
    at com.sun.org.apache.xpath.internal.jaxp.XPathImpl.evaluate(XPathImpl.java:275) 
    ... 3 more 
Caused by: java.lang.RuntimeException: Unable to evaluate expression using this context 
    at com.sun.org.apache.xpath.internal.axes.NodeSequence.setRoot(NodeSequence.java:212) 
    at com.sun.org.apache.xpath.internal.axes.LocPathIterator.execute(LocPathIterator.java:210) 
    at com.sun.org.apache.xpath.internal.XPath.execute(XPath.java:335) 
    ... 5 more 
+0

是顾客走出空IDK这是为什么...... –

+0

当我打印出了XmlString它打印机出这个'<?XML版本= “1.0”?>我读'这是正确的价值。 –

回答

1
import java.io.StringReader; 

import javax.xml.parsers.DocumentBuilder; 
import javax.xml.parsers.DocumentBuilderFactory; 

import org.w3c.dom.Document; 
import org.xml.sax.InputSource; 

public class reader { 
    public static String LookUpValues(String sb) throws Exception{ 

     DocumentBuilder builder = DocumentBuilderFactory 
       .newInstance().newDocumentBuilder(); 
     InputSource src = new InputSource(); 
     src.setCharacterStream(new StringReader(sb)); 

     Document doc = builder.parse(src); 
     String value = doc.getElementsByTagName("tag4").item(0).getTextContent(); 

     return ("Value is: " + value); 
    } 
} 
相关问题