2016-08-19 6 views
1

XML에서 중첩 된 태그의 값을 읽는 중 문제가 발생했습니다.XML에 대한 중첩 태그의 값을 문자열에 포함하십시오.

내 XML 파일 NewFile.xml tag4의 값을 읽으려고합니다.

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

여기에 해당 XML 파일을 읽고 문자열로 변환한다과 리더 클래스에 lookUpValue라는 방법을 전송 Test.java라는 메인 클래스입니다.

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 내부의 값을 읽을 수있는 방법입니다 : 여기

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입니다.

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

예 고객이 null 이유입니다 IDK 나오고 ... –

+0

을 나는 은이'밖으로 프린터 용 xmlString을 인쇄 할 때 나에게 읽기'올바른 값입니다. –

답변

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); 
    } 
}