带有命名空间问题的 C# SelectSingleNode

标签 c# xml selectsinglenode

我正在使用 C# (.NET 2.0)——实际上是在尝试使用 MONO 让它在 Mac OS X 上工作(我不认为 MONO 是问题所在)

给定以下 XML 片段,该片段已从更大的 XmlDocument 中检索为 XmlNode:

<subcategoryCode xmlns="uuid:7E1158D2-DA42-4048-8513-66B4D48FA992">N100</subcategoryCode>
<subcategoryName xmlns="uuid:7E1158D2-DA42-4048-8513-66B4D48FA992">DJ Headphones</subcategoryName>
<products xlink:href="tcm:5-33975" xlink:title="TESTONE Composition" xlink:type="simple" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="uuid:7E1158D2-DA42-4048-8513-66B4D48FA992" />
<products xlink:href="tcm:5-54295" xlink:title="HPX2000 Composition" xlink:type="simple" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="uuid:7E1158D2-DA42-4048-8513-66B4D48FA992" />
<products xlink:href="tcm:5-54296" xlink:title="HPX4000 Composition" xlink:type="simple" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="uuid:7E1158D2-DA42-4048-8513-66B4D48FA992" />

我正在尝试使用 SelectSingleNode 检索子类别名称,但我根本做不到。这是我的代码:

XmlNamespaceManager nsm = new XmlNamespaceManager(doc.NameTable);
nsm.AddNamespace(String.Empty, "uuid:7E1158D2-DA42-4048-8513-66B4D48FA992");

XmlNodeList subcatList = doc.GetElementsByTagName("subcategories");

foreach (XmlNode subcat in subcatList) {
  html += "<div id=\"";
  html += subcat.SelectSingleNode("subcategoryName", nsm).InnerText; // <-- HERE IS MY PROBLEM!!!
  html += "\" class=\"product_thumbs_holder\" style=\"display: block; \">";
  html += "</div>";
  html += "<div style=\"clear:both\"></div>";
}

我认为这个问题可能与我处理命名空间的方式有关,但我已经坚持了几个小时。我尝试了一堆类似的 AddNamespace 声明,但没有成功。

有没有人愿意提供有关问题所在的任何指示?

最佳答案

XPath 不适用于默认命名空间。您必须为命名空间创建一个前缀。此代码应该有效:

XmlNamespaceManager nsm = new XmlNamespaceManager(doc.NameTable);
nsm.AddNamespace("x", "uuid:7E1158D2-DA42-4048-8513-66B4D48FA992");

XmlNodeList subcatList = doc.GetElementsByTagName("subcategories");

foreach (XmlNode subcat in subcatList) {
    html += "<div id=\"";
    html += subcat.SelectSingleNode("x:subcategoryName", nsm).InnerText; // <-- HERE IS MY PROBLEM!!!
    html += "\" class=\"product_thumbs_holder\" style=\"display: block; \">";
    html += "</div>";
    html += "<div style=\"clear:both\"></div>";
}

注意:您不需要在de xml 文档中添加前缀。 xml 文档中的前缀和代码中的前缀不必匹配,只要关联的命名空间匹配即可。

关于带有命名空间问题的 C# SelectSingleNode,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5456928/

相关文章:

android - 使用 eclipse IDE for android 在 android 代码中搜索对布局 xml 文件的引用

c# - 不完整的 XML 属性

c# - NodeList.SelectSingleNode() 语法

c# - C# "using"语句什么时候最有用?

c# - Unity DI 使用 PerRequestLifetimeManager 注入(inject) DbContext

c# - 玩家移动时与子弹碰撞 - Unity UNET

powershell - 使用xPath的Powershell脚本中的.SelectSingleNode无法从web.config文件中提取值

c# - Microsoft 蓝牙堆栈并入 Widcomm 蓝牙堆栈?

c# - 3 尝试使用 C# 删除 XML 节点

使用 xPath .SelectSingleNode 的 Powershell 脚本无法从 web.config 文件 xmlns 中提取值