为什么我无法选择此XMLnode的字体节点?

时间:2017-03-27 23:22:08

标签: c# .net xml xml-namespaces .net-4.6.2

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>

我试图选择这样但它失败了。我能够读取属性和其他节点

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");

}

2 个答案:

答案 0 :(得分:1)

您仍需要使用上面代码中添加的命名空间。所以需要类似下面的东西。

vrNode.SelectSingleNode("//d:font", nsmgr);

另外,请尝试使用/*/,因为它可能比//更快。

答案 1 :(得分:1)

我无法弄清楚如何使用默认命名空间,但这种方式似乎有效:

nsmgr.AddNamespace("x", "http://www.w3.org/1999/xhtml");
// ...
var vr_Word_Type = vrNode.SelectSingleNode("x:font", nsmgr);