【问题标题】:Problem with evaluating XPath expression in Java在 Java 中评估 XPath 表达式的问题
【发布时间】:2010-06-05 18:20:00
【问题描述】:

有人可以帮我找出我在评估以下 XPath 表达式时所犯的错误吗?
我想通过 XPath 获取我的 xml 中节点“模型”下的所有“数据表”节点。
这是我的 XML 文档:

<?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>

这里是提取所需节点列表的Java代码:

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

加载和解析xml文件没有问题,我可以在dDoc中看到正确的节点。问题在于 xpath 在评估我的表达式时不返回任何内容。为了测试目的,我尝试了许多其他表达式,但每次生成的 NodeList "nl" 都没有任何项目

【问题讨论】:

  • 好问题 (+1)。有关更多信息和有关问题原因的提示,请参阅我的答案。

标签: java xpath


【解决方案1】:

XML 文档很可能有一个默认命名空间,您没有显示。

提供的 XPath 表达式在应用于提供的 XML 文档时选择&lt;DataTable&gt; 元素

【讨论】:

  • 谢谢诺瓦切夫,我明白了。我犯了这个错误
猜你喜欢
  • 1970-01-01
  • 2019-04-08
  • 1970-01-01
  • 1970-01-01
  • 2013-07-13
  • 2013-11-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多