这是我的XML,通过将s
打印到控制台获得,如下代码所示:
func1
这是我的代码:
objectives: {
enemies: [
name: {
type: String,
required: true
},
health: {
type: number,
required: true
}
]
}
这将选择0个元素。为什么?
如果我取消注释将serviceListXml
设置为测试字符串的行,它将发现3个元素如预期的那样。我以为真实的XML上可能有BOM,所以我尝试使用<?xml version="1.0" encoding="utf-8"?>
<service xml:base="https://fnord/live/api/v1" xmlns="http://www.w3.org/2007/app" xmlns:atom="http://www.w3.org/2005/Atom">
<workspace>
<atom:title type="text">Service List</atom:title>
<collection href="Erp.BO.ABCCodeSvc">
<atom:title type="text">Erp.BO.ABCCodeSvc</atom:title>
</collection>
<collection href="Erp.BO.AccountBudgetSvc">
<atom:title type="text">Erp.BO.AccountBudgetSvc</atom:title>
</collection>
<collection href="Erp.BO.ACTTypeSvc">
<atom:title type="text">Erp.BO.ACTTypeSvc</atom:title>
</collection>
<!-- hundreds more collection elements -->
</workspace>
</service>
,但这没什么区别。
答案 0 :(得分:1)
这是因为在您的原始XML集合中,它位于http://www.w3.org/2007/app
命名空间中,该命名空间是该XML的默认命名空间。为了能够选择collection
元素,您有两个选择:
选项1:将名称空间传递到您的XPathDocument中,例如:
var ns = new XmlNamespaceManager(nav.NameTable);
ns.AddNamespace("ns", "http://www.w3.org/2007/app");
var foo = nav.Select("//ns:collection", ns);
选项2:使用此XPath:var foo = nav.Select("//*[local-name() = 'collection']");