为什么我不能 select 这个 XMLnode 的字体节点?
Why i am not able to select font node of this XMLnode?
OuterXML
的XMLNode
低于
<d:entry id="_6" d:title="آ" xmlns:d="http://www.apple.com/DTDs/DictionaryService-1.0.rng"><d:index d:value="آ" d:title="آ" /><h1 xmlns="http://www.w3.org/1999/xhtml">آ</h1><font color="#007000" xmlns="http://www.w3.org/1999/xhtml">interjection</font><br xmlns="http://www.w3.org/1999/xhtml" />
O, oh! (vocative particle)
</d:entry>
我正在尝试 select 这样,但失败了。我能够读取属性和其他节点
var vr_Word_Type = vrNode.SelectSingleNode(".//font", nsmgr);
var vr_Word_Type2 = vrNode.SelectSingleNode(".//font");
这是我的完整代码
XmlDocument rssDoc = new XmlDocument();
rssDoc.Load(@"D:\my.xml");
XmlNamespaceManager nsmgr = new XmlNamespaceManager(rssDoc.NameTable);
nsmgr.AddNamespace("d", "http://www.apple.com/DTDs/DictionaryService-1.0.rng");
XmlNodeList rssItems = rssDoc.SelectNodes("//d:entry", nsmgr);
foreach (XmlNode vrNode in rssItems)
{
string srTitle = vrNode.Attributes["d:title"]?.Value;
var vrSubNodes = vrNode.SelectNodes(".//d:index", nsmgr);
List<string> lstIndex_Values = new List<string>();
foreach (XmlNode vrD_Val in vrSubNodes)
{
lstIndex_Values.Add(vrD_Val.Attributes["d:value"]?.Value);
}
var vr_Word_Type = vrNode.SelectSingleNode(".//font", nsmgr);
var vr_Word_Type2 = vrNode.SelectSingleNode(".//font");
}
您仍然需要使用上面代码中添加的名称空间。所以需要类似下面的东西。
vrNode.SelectSingleNode("//d:font", nsmgr);
此外,请尝试使用 /*/
,因为它比 //
更快。
我不知道如何使用默认命名空间,但这种方法似乎可行:
nsmgr.AddNamespace("x", "http://www.w3.org/1999/xhtml");
// ...
var vr_Word_Type = vrNode.SelectSingleNode("x:font", nsmgr);
OuterXML
的XMLNode
低于
<d:entry id="_6" d:title="آ" xmlns:d="http://www.apple.com/DTDs/DictionaryService-1.0.rng"><d:index d:value="آ" d:title="آ" /><h1 xmlns="http://www.w3.org/1999/xhtml">آ</h1><font color="#007000" xmlns="http://www.w3.org/1999/xhtml">interjection</font><br xmlns="http://www.w3.org/1999/xhtml" />
O, oh! (vocative particle)
</d:entry>
我正在尝试 select 这样,但失败了。我能够读取属性和其他节点
var vr_Word_Type = vrNode.SelectSingleNode(".//font", nsmgr);
var vr_Word_Type2 = vrNode.SelectSingleNode(".//font");
这是我的完整代码
XmlDocument rssDoc = new XmlDocument();
rssDoc.Load(@"D:\my.xml");
XmlNamespaceManager nsmgr = new XmlNamespaceManager(rssDoc.NameTable);
nsmgr.AddNamespace("d", "http://www.apple.com/DTDs/DictionaryService-1.0.rng");
XmlNodeList rssItems = rssDoc.SelectNodes("//d:entry", nsmgr);
foreach (XmlNode vrNode in rssItems)
{
string srTitle = vrNode.Attributes["d:title"]?.Value;
var vrSubNodes = vrNode.SelectNodes(".//d:index", nsmgr);
List<string> lstIndex_Values = new List<string>();
foreach (XmlNode vrD_Val in vrSubNodes)
{
lstIndex_Values.Add(vrD_Val.Attributes["d:value"]?.Value);
}
var vr_Word_Type = vrNode.SelectSingleNode(".//font", nsmgr);
var vr_Word_Type2 = vrNode.SelectSingleNode(".//font");
}
您仍然需要使用上面代码中添加的名称空间。所以需要类似下面的东西。
vrNode.SelectSingleNode("//d:font", nsmgr);
此外,请尝试使用 /*/
,因为它比 //
更快。
我不知道如何使用默认命名空间,但这种方法似乎可行:
nsmgr.AddNamespace("x", "http://www.w3.org/1999/xhtml");
// ...
var vr_Word_Type = vrNode.SelectSingleNode("x:font", nsmgr);