我想要一些关于使用saxon对默认命名空间进行xpath解析的信息。我使用Saxon-HE-9.5.1-3.jar在代码中使用xpath 2特性。在类路径中包含saxon库之后,我面临着一个问题,即使用默认名称空间解析XML文档的xpath。
am中的示例XML使用:
<?xml version="1.0" encoding="utf-8"?>
<RESPONSE xmlns="http://www.abc.com/" responseCode="200">
<HEADER>
<HITS>100</HITS>
</HEADER>
</RESPONSE>
有效XPATH: /RESPONSE/HEADER/HITS
以下是它工作和不工作的情况:
>
"XPATH Works":未指定命名空间时
示例:
“XPATH有效”:当给定带有前缀的命名空间时,示例:
“XPATH不起作用”:当给定不带前缀的默认命名空间时示例:
你能帮我解释为什么saxon以不同的方式对待没有命名空间和默认命名空间吗?还有我如何解决为具有默认命名空间的文档执行xpath的情况。
下面是我的代码片段:
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathExpression;
import javax.xml.xpath.XPathExpressionException;
import javax.xml.xpath.XPathFactory;
import net.sf.saxon.xpath.XPathEvaluator;
import net.sf.saxon.xpath.XPathFactoryImpl;
.
.
.
DocumentBuilder builder;
Document doc;
DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance();
domFactory.setNamespaceAware(true);
builder = domFactory.newDocumentBuilder();
doc = builder.parse(new ByteArrayInputStream(b, 0, size));
XPathFactory factory = XPathFactoryImpl.newInstance(XPathConstants.DOM_OBJECT_MODEL);
XPathEvaluator xpathCompiler = (XPathEvaluator) factory.newXPath();
XPathExpression expr = xpathCompiler.compile(xpath);
NodeList childNodes = (NodeList) expr.evaluate(doc, XPathConstants.NODESET);
谢谢
这不是萨克森特有的,而是名称空间工作方式的基本部分。在示例1和2中,RESPONSE元素不在名称空间中,但在案例3中,它(及其所有子元素)位于http://www.abc.com/
命名空间。使用javax.xml。xpath API如果您希望能够匹配特定命名空间中的节点,或者由于您在xpath 2.0中,您可以使用*:localName
符号来匹配具有给定本地名称的所有节点,而不管其命名空间如何。
/*:RESPONSE/*:HEADER/*:HITS
问题内容: 我想操作具有默认名称空间但没有前缀的xml文档。有没有办法使用没有名称空间uri的xpath,就像没有名称空间一样? 我相信,如果将documentBuilderFactory的namespaceAware属性设置为false,那应该是可能的。但就我而言,它不起作用。 我的理解是不正确的还是我在代码中做错了? 这是我的代码: 这是我的xml: 问题答案: 使用默认名称空间(无前缀)的文
问题内容: 我想使用JDOM读取XML文件,然后使用XPath从JDOM Document中提取数据。它可以很好地创建Document对象,但是当我使用XPath在Document中查询元素列表时,我什么也没得到。 我的XML文档在根元素中定义了一个默认名称空间。有趣的是,当我删除默认名称空间时,它成功运行了XPath查询并返回了我想要的元素。要使XPath查询返回结果,我还必须做什么? XML:
我正在寻找一个XPath表达式来获取节点的默认名称空间。 我的XML文档可能如下所示。 如果有人能给我一点提示,我将不胜感激。
问题内容: 我是jQuery新手,想解析XML文档。 我可以使用默认名称空间解析常规XML,但可以使用以下XML解析该XML: 我真正想要的只是那个。 到目前为止,我一直在使用: 真的没有运气。有任何想法吗? 问题答案: 我知道了。 原来,它需要逃脱冒号。 正如Rich所指出的: 更好的解决方案不需要转义,并且可以在所有“现代”浏览器上使用:
我需要使用默认命名空间创建/读取xml文件: 但我得到: 我知道包级元数据,但这在复杂的包结构中不起作用: 我已经定义了模型类,如Address: 客户: 公共字段的父类: 然后是保存具体xml XmlBoo的数据/结构的特定类: XmlFoo: package-info.java包括在两个提到的包example.xml.boo: 和example.xml.foo: 最后是主要方法: 我在这里尝试
问题内容: 我正在做这个小项目,我的任务是读取xml文件并进行解析,以便可以将其存储在类中。这是xml示例。它是用SOAP编写的,我要做的就是获取 xmlns:ns2="http://abc.examples.com 问题答案: 要使用Java中的命名空间进行XPath查询,我相信您需要执行以下操作: 您还需要先调用;,然后再创建来解析文档。