Java 使用jdom和jaxen选择元素

Java 使用jdom和jaxen选择元素,java,jdom,Java,Jdom,我有以下xml <administration xmlns="http://www.w3schools.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="schema.xsd"> <students> <student name = 'alpha' number='s1111111'>

我有以下xml

   <administration xmlns="http://www.w3schools.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="schema.xsd">
      <students>
           <student name = 'alpha' number='s1111111'>
              <grades>
                 <grade course='beta'> 1 </grade>
              </grades>
      </students>
   </administration>

但是正如我所说的,一旦我返回studentXmlElement,它就是空的。

几件事:student标记不是闭合的,xpath有一个前导空格。我想这是错的

您的xml具有指定的命名空间,并且您的xpath选择不包括命名空间和前缀。 使用“xpath.addNamespace(java.lang.String前缀,java.lang.String uri)”方法向xpath添加命名空间

请注意,xml没有任何名称空间前缀。 在XPath中,没有“默认名称空间”这样的东西。空前缀始终解析为空命名空间URI


请参阅此处的API以了解更多详细信息:

感谢您的解释性回答,我查看了API,但我有点困惑,我现在编写的代码在xml文件中没有名称空间前缀。使用这种方法,如果没有前缀,就无法提取。这就是‘注意:在XPath中,没有所谓的‘默认名称空间’。空前缀始终解析为API中的空命名空间URI。在xml中使用一些前缀,如xmlns:w3s,在这种情况下use可以使用addNameSpace方法,或者从xml中删除名称空间(xmlns=“)本身,在这种情况下,您当前的xpath提取代码可以工作。我从xml中删除了名称空间,我在一些在线xpath解析器中对其进行了测试,但C#不会返回任何内容。
 Element studentXmlElement = (org.jdom.Element) XPath.selectSingleNode(reader.root,    " administration/students/student[@number='s1111111']");