让NodeList.SelectSingleNode()正常工作时遇到问题。我的XML如下所示:
<?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?>
<inm:Results xmlns:inm="http://www.namespace.com/1.0">
<inm:Recordset setCount="18254">
<inm:Record setEntry="0">
<!-- snip -->
<inm:Image>fileName.jpg</inm:Image>
</inm:Record>
</inm:Recordset>
</inm:Results>数据是一长串的<inm:Record>条目。
我打开文档并根据“inm: NodeList”创建了一个记录对象。这很好用。
XmlDocument xdoc = new XmlDocument();
xdoc.Load(openFileDialog1.FileName);
XmlNodeList xRecord = xdoc.GetElementsByTagName("inm:Record");我开始使用for循环遍历NodeList。在处理给定条目之前,我希望检查并查看是否设置了<inm:Image>。我以为这样做会非常简单
string strImage = xRecord[i].SelectSingleNode("inm:Image").InnerText;我的想法是,“对于我使用的XRecord,去找<inm:Image>值...But这不起作用,因为我得到了一个异常,说我需要一个XmlNameSpaceManager。所以,我试着设置它,但是从来没有得到正确的语法。”
有人能告诉我在这种情况下如何使用正确的XmlNameSpaceManager语法吗?
我现在已经解决了这个问题,方法是循环遍历给定xRecord的所有childNodes,并在循环到它时检查标记。我想先检查这个值,看看是否需要遍历那个<inm:Record>条目。
发布于 2012-06-27 01:35:31
不需要遍历所有记录元素,只需使用XPath指定所需的子集:
XmlDocument xdoc = new XmlDocument();
xdoc.Load(openFileDialog1.FileName);
XmlNamespaceManager manager = new XmlNamespaceManager(xdoc.NameTable);
manager.AddNamespace("inm", "http://www.inmagic.com/webpublisher/query");
XmlNodeList nodes = xdoc.SelectNodes("/inm:Results/inm:Recordset/inm:Record[inm:Image != '']", manager);发布于 2012-06-27 01:23:21
XmlNamespaceManager nsMgr = new XmlNamespaceManager(xdoc.NameTable);
string strImage = xRecord[i].SelectSingleNode("inm:Image",nsMgr).InnerText; 应该做这件事。
发布于 2012-06-27 01:27:55
下面是一个使用LINQ to XML库检索该节点的值的示例:
XDocument doc = XDocument.Load(openFileDialog1.FileName);
List<XElement> docElements = doc.Elements().ToList();
XElement results = docElements.Elements().Where(
ele => ele.Name.LocalName == "Results").First();
XElement firstRecord = results.Elements().Where(
ele => ele.Name.LocalName == "Record").First();
XElement recordImage = firstRecord .Elements().Where(
ele => ele.Name.LocalName == "Image").First();
string imageName = recordImage.Value;另外,顺便说一句,使用Hungarian notation for a type-checked language is overkill。当字符串变量始终是string时,您不需要在字符串变量前面加上str。
https://stackoverflow.com/questions/11212509
复制相似问题