我对命名空间失去了理智。在看了大多数关于如何使用SelectNodes的帖子之后,我不能为我的生活弄清楚如何使用它。
我的xml:
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<Fragment>
<ComponentGroup Id="ProgramFiles">
<Component ..../>
<Component ..../>
<Component ..../>
我试过了:
xnManager = new XmlNamespaceManager(doc.NameTable);
xnManager.AddNamespace("wx", "http://schemas.microsoft.com/wix/2006/wi");
//XmlNodeList aNodes = doc.SelectNodes("//wx:Wix/wx:Fragment/wx:ComponentGroup/Component", xnManager);
//var aNodes = doc.GetElementsByTagName("wx:Wix/Fragment/ComponentGroup/Component");
//System.Xml.XmlNodeList aNodes = doc.SelectNodes("//*[local-name()="Component"]");
我错过了什么?所有结果返回0个元素。文档是有效的,并加载到doc.
请尝试以下概念示例。
正在使用LINQ to XMLAPI。
c#
void Main()
{
XDocument xdoc = XDocument.Parse(@"<Wix xmlns='http://schemas.microsoft.com/wix/2006/wi'>
<Fragment>
<ComponentGroup Id='ProgramFiles'>
<Component>One</Component>
<Component>Two</Component>
<Component>Three</Component>
</ComponentGroup>
</Fragment>
</Wix>");
XNamespace ns = xdoc.Root.GetDefaultNamespace();
foreach (XElement xelem in xdoc.Descendants(ns + "Component"))
{
Console.WriteLine(xelem.Value);
}
}
One
Two
Three