【问题标题】:JAXP XPathFactory NamespacesJAXP XPathFactory 命名空间
【发布时间】:2010-12-03 14:33:24
【问题描述】:

我正在尝试从 android(java) 中的 xml 文档中检索一个节点。

<?xml version="1.0" encoding="utf-8" ?>
<config:Manifest xmlns:config="http://leaflabs.com/manifest.config.xsd"> 
  <config:Text config:name="siteowner" config:desc="Site owner" config:transform="title"/>
  <config:Text config:name="siteowner1" config:desc="Site owner" config:transform="title"/>
</config:Manifest>

XPATH

config:Manifest/config:Text[@config:name='siteowner']

我正在使用 JAXP XPathFactory。我遇到的问题是每次都返回 null。

我确定我的 xpath 是正确的,确保我的文档构建器 NamespaceAware 设置为 true,我什至遵循了 Example (在页面底部)实现了 NamespaceContext 但我仍然一无所获。

我查看了一个 stackoverflow 帖子,但没有人回答这个人 Link

我做错了什么

【问题讨论】:

  • 您的 relative XPath 表达式没问题,只要上下文节点是文档根。你也可以使用这个绝对表达式:/config:Manifest/config:Text[@config:name='siteowner']。如果这导致一个空节点集,请检查您的命名空间 URI 绑定是否正确。

标签: java android xml xpath


【解决方案1】:

您的代码中的问题是工厂不知道命名空间。还有一个线程可以解决这个问题,How to use XPath on xml docs having default namespace

建议你试试这样的,

XPath xPath = XPathFactory.newInstance().newXPath(); xPath.setNamespaceContext(新 MyNamespaceContext());

【讨论】:

    【解决方案2】:

    不是 100% 确定,但我相信您需要在 xpath 语句前面添加一个标记:

    我会尝试以下方法:

    $this/config:Manifest/config:Text[@config:name='siteowner']

    如果这不起作用,试试这个:

    /config:Manifest/config:Text[@config:name='siteowner']

    如果这些都不起作用,试试这个:

    //config:Manifest/config:Text[@config:name='siteowner']

    【讨论】:

      猜你喜欢
      • 2014-03-19
      • 2011-09-11
      • 2010-10-20
      • 1970-01-01
      • 2020-06-28
      • 1970-01-01
      • 2016-05-24
      • 2010-12-23
      • 1970-01-01
      相关资源
      最近更新 更多