Javascript 如何从XPathResult中的元素访问属性和文本值?
以下内容都是用JavaScript编写的 我有以下XMLJavascript 如何从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]
<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语句,以确定它是哪个节点。再次感谢你的帮助。