在使用带有Dom4j的xsd模式时,从xpath表达式获取null

时间:2011-08-16 09:50:56

标签: xpath xsd dom4j

我正在尝试将dom4j与我的应用程序一起使用,我解决了解析以下xml文件的问题:

<menu xmlns="http://example.com/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://example.com/ my-schema.xsd">
        <content>
            <caption>aaa</caption>
            <description>vvvv</description>
        </content>
</menu>

我初始化了dom4j解析器,现在我正在尝试检索描述节点:

Node node = document.selectSingleNode( "/menu/content/description" );

(我知道我可以使用迭代器,但xpath更适合我)

我有null而不是描述节点。

当我试图弄清楚什么是错的时候,我从xml中移除了模式声明(所以开头只有简单的<menu>)然后完全正常

我宁愿拥有xsd声明,所以我做错了什么?

提前致谢!

1 个答案:

答案 0 :(得分:0)

xpath失败的原因是它不支持名称空间。

试试这个:

/*[local-name()='menu' and namespace-uri()='http://example.com/']/*[local-name()='content' and namespace-uri()='http://example.com/']/*[local-name()='description' and namespace-uri()='http://example.com/']

更好的是,下载DanSharp Xml Viewer,您可以为自己生成这些路径。

http://www.bizbert.com/bizbert/2007/11/25/DanSharp+XmlViewer.aspx