我想使用JDOM读取XML文件,然后使用XPath从JDOM
Document中提取数据。它可以很好地创建Document对象,但是当我使用XPath在Document中查询元素列表时,我什么也没得到。
我的XML文档在根元素中定义了一个默认名称空间。有趣的是,当我删除默认名称空间时,它成功运行了XPath查询并返回了我想要的元素。要使XPath查询返回结果,我还必须做什么?
XML:
<?xml version="1.0" encoding="UTF-8"?>
<collection xmlns="http://www.foo.com">
<dvd id="A">
<title>Lord of the Rings: The Fellowship of the Ring</title>
<length>178</length>
<actor>Ian Holm</actor>
<actor>Elijah Wood</actor>
<actor>Ian McKellen</actor>
</dvd>
<dvd id="B">
<title>The Matrix</title>
<length>136</length>
<actor>Keanu Reeves</actor>
<actor>Laurence Fishburne</actor>
</dvd>
</collection>
Java:
public static void main(String args[]) throws Exception {
SAXBuilder builder = new SAXBuilder();
Document d = builder.build("xpath.xml");
XPath xpath = XPath.newInstance("collection/dvd");
xpath.addNamespace(d.getRootElement().getNamespace());
System.out.println(xpath.selectNodes(d));
}
XPath 1.0 不支持默认名称空间的概念( XPath 2.0支持 )。任何未加前缀的标记始终被认为是无名命名空间的一部分。
使用 XPath 1.0时, 您需要以下内容:
public static void main(String args[]) throws Exception {
SAXBuilder builder = new SAXBuilder();
Document d = builder.build("xpath.xml");
XPath xpath = XPath.newInstance("x:collection/x:dvd");
xpath.addNamespace("x", d.getRootElement().getNamespaceURI());
System.out.println(xpath.selectNodes(d));
}
问题内容: 有没有一种方法可以在python ElementTree中定义默认/无前缀的命名空间?这似乎不起作用… 这也不是: 可以,但是我必须在每个元素前加上前缀: 在OSX上使用Python 3.5。 编辑:如果答案为“否”,您仍然可以获得赏金:-)。我只是想要一个花了很多时间使用它的人的明确“否”。 问题答案: 没有简单的方法可以透明地处理默认名称空间。正如您已经提到的,为空名称空间分配非空
谢谢你抽出时间。 问候,
在启动并运行Emacs/Clojure环境时,我现在遇到了我不确定是否正常的行为。特别是,当我启动一个nREPL并编译(C-C-k)我的缓冲区时,我会被放到内核顶部定义的名称空间之外的其他地方。clj文件。我应该加上免责声明,我对Clojure和名称空间有点陌生,因此我对这一切的理解可能是模糊的。我愿意接受那些给我提供更好方法的固执己见的答案™. 首先,关于我的设置: 我的emacs环境是Coco
问题内容: 我正在使用JAXWS为正在构建的Java应用程序生成WebService客户端。 当JAXWS构建其XML以用于SOAP协议时,它将生成以下名称空间前缀: 我的问题是,除非 我的 XML代理人(XML namepspace前缀为),否则我的Counterpart(一家大型汇款公司)将管理我的客户端连接到的服务器,拒绝接受WebService调用( 请不要问我为什么 )。像这样: 所以我
我需要使用默认命名空间创建/读取xml文件: 但我得到: 我知道包级元数据,但这在复杂的包结构中不起作用: 我已经定义了模型类,如Address: 客户: 公共字段的父类: 然后是保存具体xml XmlBoo的数据/结构的特定类: XmlFoo: package-info.java包括在两个提到的包example.xml.boo: 和example.xml.foo: 最后是主要方法: 我在这里尝试
我有一个关于ES6导入模块的问题。 我试图在我的Three.js代码中添加OrbitControl。由于OrbitControls是一个单独的模块,我需要在我的代码中分别导入它们,如下所示。它工作得很好。 然而 我首先想到的是 原因是, 据我所知,如果模块将某些内容导出为导出默认值, 我可以通过在“导入”代码中添加花括号来访问它们。 但是,它没有起作用,因此我假设“三个orbitcontrols”