Javascript 如何从XPathResult中的元素访问属性和文本值?

Javascript 如何从XPathResult中的元素访问属性和文本值?,javascript,dom,Javascript,Dom,以下内容都是用JavaScript编写的 我有以下XML <Hotels> <Hotel category='standard'>Hotel 1</Hotel> <Hotel category='superior'>Hotel 2</Hotel> </Hotels> 1号酒店 2号酒店 来自xpath(“//Hotel”)的“结果”返回一个长度为2的数组 我接下来要做什么来获取类别值和文本 i、 e.结果[0]

以下内容都是用JavaScript编写的

我有以下XML

<Hotels>
  <Hotel category='standard'>Hotel 1</Hotel>
  <Hotel category='superior'>Hotel 2</Hotel>
</Hotels>

1号酒店
2号酒店
来自xpath(“//Hotel”)的“结果”返回一个长度为2的数组

我接下来要做什么来获取类别值和文本

i、 e.
结果[0]//将给我类别值

结果[0]//将给我文本

我的xpath中的“结果”(//Hotel) 返回长度为2的数组

我下一步要做什么才能到达终点 类别值和文本

您可以使用单个XPath表达式选择
类别
属性和文本子级

/*/Hotel/@category | /*/Hotel/text()
<Hotels>
    <Hotel category='standard'>Hotel 1</Hotel>
    <Hotel category='superior'>Hotel 2</Hotel>
</Hotels>
结果的顺序可能取决于使用的XPath引擎,但通常是文档顺序

因此,使用提供的XML文档

/*/Hotel/@category | /*/Hotel/text()
<Hotels>
    <Hotel category='standard'>Hotel 1</Hotel>
    <Hotel category='superior'>Hotel 2</Hotel>
</Hotels>

1号酒店
2号酒店

上面的XPath表达式选择了四个节点:第一个
Hotel
元素的
category
属性、第一个
Hotel
元素的文本节点子节点、第二个
Hotel
元素的
category
属性和第二个
Hotel
元素的文本节点子节点看起来不像XML。另外,您使用的是哪种语言?结果是一个节点集。因此,对于每个节点,@category将为您提供类别,text()将为您提供文本。它们只是酒店的名称。我尝试了警报(结果[0].@category)和警报(结果[0].text()),但得到了空白警报。问得好,+1。有关选择所有必需节点的单行XPath解决方案,请参见我的答案。:)谢谢Dimitre,但如何从这些节点获取值?@nexar:这取决于您使用的特定XPath引擎。通常,XPath表达式是通过调用名为
SelectNodes()
的方法来计算的,它返回的结果类型通常称为
XmlNodeList
,因此您必须遍历结果才能获得单个
xmlnodel
对象。您需要阅读XPath/DOM文档。另外,我的另一个问题是,如何知道返回的4个节点中哪些与“category”相关,哪些与text()相关,或者这也取决于特定的XPath引擎?@nexar:是的,通常XmlNode对象具有确定其节点类型的属性——同样,这在不同的XPath实现中可能有所不同。但正如我所说的,节点肯定是按文档顺序排列的,因此在您的例子中,每个
类别
属性都将直接位于其相应的文本节点之前。是的,您是对的。它们是按文档顺序排列的,我正在节点名上执行switch语句,以确定它是哪个节点。再次感谢你的帮助。