2010-06-05 2 views
3

다음 XPath 표현식을 평가할 때 실수를 저지르는 사람이 있습니까?
XPath를 통해 내 XML의 노드 "모델"아래에 모든 "DataTable"노드를 가져 오려고합니다. 로드 및 XML 파일을 구문 분석 아무런 문제가 없습니다Java에서 XPath 표현식을 평가할 때의 문제점

try { 
    DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance(); 
    domFactory.setNamespaceAware(true); 
    domFactory.setIgnoringComments(true); 
    domFactory.setIgnoringElementContentWhitespace(true); 
    DocumentBuilder builder = domFactory.newDocumentBuilder(); 
    Document dDoc = builder.parse("D:\TEST\myFile.xml"); 

    XPath xpath = XPathFactory.newInstance().newXPath(); 
    NodeList nl = (NodeList) xpath.evaluate("//Model//DataTable", dDoc, XPathConstants.NODESET); 
    System.out.println(nl.getLength()); 

}catch (Exception ex) { 
    System.out.println(ex.getMessage()); 
} 

내가 dDoc에서 올바른 노드를 볼 수 있습니다 필요한 노드 목록을 추출하려면 여기를

<?xml version="1.0" encoding="UTF-8"?> 
<Root> 
    <Application> 
    <Model> 
     <DataSet name="ds" primaryTable="Members" openRows="1"> 
     <DataTable name="Members" openFor="write"> 
      <DataColumn name="id" type="String" mandatory="true" primaryKey="true" valueBy="user"/> 
      <DataColumn name="name" type="String" mandatory="true" valueBy="user"/> 
      <DataColumn name="address" type="String" mandatory="false" valueBy="user"/> 
      <DataColumn name="city" type="String" mandatory="false" valueBy="user"/> 
      <DataColumn name="country" type="String" mandatory="false" valueBy="user"/> 
     </DataTable> 
     </DataSet> 
    </Model> 
    <View> 
     <Composite> 
     <Grid> 
      <Label value="ID:" row="0" column="0" /> 
      <Label value="Name:" row="1" column="0" /> 
      <Label value="Address:" row="2" column="0" /> 
      <Label value="City:" row="3" column="0" /> 
      <Label value="Country:" row="4" column="0" /> 

      <TextField name="txtId" row="0" column="1" /> 
      <TextField name="txtName" row="1" column="1" /> 
      <TextField name="txtAddress" row="2" column="1" /> 
      <TextField name="txtCity" row="3" column="1" /> 
      <TextField name="txtCountry" row="4" column="1" /> 
     </Grid> 
     </Composite> 
    </View> 
    </Application> 
</Root> 

자바 코드 :
여기 내 XML의 문서입니다 . 문제는 내 식을 평가할 때 아무 것도 반환하지 않는 xpath를 사용하는 경우입니다. 테스트 목적으로 여러 다른 표현식을 시도했지만 NodeList "nl"에 항목이 없습니다.

+0

좋은 질문 (+1). 문제의 원인에 대한 자세한 정보와 힌트를 보려면 내 대답을 참조하십시오. –

답변

2

아마도 XML 문서에는 표시되지 않은 기본 네임 스페이스이있을 것입니다. 제공된 XML 문서에 적용 할 때

제공된 XPath 표현은 <DataTable> 요소를 선택한다.

+0

Novatchev에 감사드립니다. 나는이 실수를 저질렀다. – WSK

관련 문제