2

我在选择属于特定命名空间的元素时遇到问题。我的 xpath 表达式在 XMLSpy 中工作,但在使用 Xalan 库时失败..

<item>
   <media:content attrb="xyz">
     <dcterms:valid>VALUE</dcterms:valid>
  </media:content>
</item>

我的表情是./item/media:content/dcterms:valid。我已经将这两个名称空间定义都添加到了我的 XSLT 中。同样,这会在 XMLSpy 中选择正确的值,但在通过 Xalan 库运行时会失败。

有任何想法吗?

4

6 回答 6

1

You'll need to implement a org.apache.xml.utils.PrefixResolver to map the prefix to namespace URI, and then pass an instance to the XPath instance you use. This will allow you to use different prefixes in your XPath expressions from those in your documents (which you might not control).

For example, you could create an implementation that uses a pair of maps (one to map from prefix -> namespace URI, and one from URI to prefix).

In JAXP, the equivalent interface to implement is javax.xml.namespace.NamespaceContext.

于 2008-10-12T18:22:54.043 回答
0

You could try a XPath select on the local-name and (optionally) give a namespace URI. And example:

/*[local-name()='NewHireList' and namespace-uri()='http://BRE.NewHireList']/*[local-name()='Record' and namespace-uri()='']

See this page for more, or google on local-name and XPath.

于 2008-10-12T18:42:58.590 回答
0

您是否尝试过定义 XML blob 的命名空间?

<item xmlns:dcterms="http://dcterms.example" xmlns:media="http://media.example">
   <media:content attrb="xyz">
     <dcterms:valid>VALUE</dcterms:valid>
  </media:content>
</item>

IE

  • xmlns:dcterms="http://dcterms.example"
  • xmlns:media="http://media.example"
于 2008-10-09T13:52:19.643 回答
0

XML 中的前缀在绑定到某个命名空间之前是没有意义的,对于 XPath 表达式也是如此——它不会仅仅因为您使用了相同的前缀而匹配。

您必须创建自己的 PrefixResolver 类,该类将为您在 XPath 表达式中拥有的前缀提供完整的命名空间 URI。

于 2008-10-11T11:28:17.813 回答
0

您在什么情况下尝试评估您的 XPath?(例如,一个 XSLT?)如果是根元素,您可以尝试删除前导“.”:“/item/media:content/dcterms:valid.” 如果有一系列项目,您可以尝试在开头添加另一个斜杠:“//item/media:content/dcterms:valid”。这将选择文档中与该标准匹配的所有项目,无论它们位于文档结构中的哪个位置。

于 2008-10-10T19:41:02.547 回答
-1

也许 XMLSpy 已经实现了 2.x XSLT 规范,我相信 XPath 是其中的一部分。另一方面,Xalan 仍然是 1.x。

于 2008-10-10T17:02:36.517 回答