我在尝试从XML文档中提取节点集合时遇到了永无止境的问题。我在StackOverflow上一直在玩几十个代码示例,但我总是得到一个空的结果集。我开始认为这可能与命名空间有关,但我似乎无法找到任何简单的例子来告诉我我做错了什么。这是我试图访问的(简化的)XML文件:
<?xml version="1.0" encoding="utf-8" ?>
<pages
xmlns="http://myurl.co.uk/xml/Pages.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.myurl.co.uk/xml/Pages.xsd Pages.xsd"
>
<page token="A">
<page1>P1</page1>
<page2>P2</page2>
</page>
<page token="B">
<page1>P1</page1>
<page2>P2</page2>
</page>
<page token="C">
<page1>P1</page1>
<page2>P2</page2>
</page>
</pages>
架构......
<?xml version="1.0" encoding="utf-8"?>
<xs:schema
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns="http://myurl.co.uk/xml/Pages.xsd"
targetNamespace="http://myurl.co.uk/xml/Pages.xsd"
elementFormDefault="qualified"
attributeFormDefault="unqualified"
>
<xs:element name="pages">
<xs:complexType>
<xs:sequence">
<xs:element name="page" type="PageType">
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:complexType name="PageType">
<xs:sequence>
<xs:element name="page1" type="xs:string"/>
<xs:element name="page2" type="xs:string"/>
</xs:sequence>
<xs:attribute name="token" type="xs:string" use="required" />
</xs:complexType>
</xs:schema>
我尝试过的数百个代码片段中的一个:
XDocument pageDoc = XDocument.Load( "Pages.xml" );
var a = pageDoc.Root.XPathSelectElements( "page" );
我正用这个撕掉我的头发。如果你可以提供任何帮助,我会尽量不要扯掉你的手臂,因为我拼命抢夺它。
亲切的祝愿〜帕特里克
答案 0 :(得分:2)
XDocument Xdoc = XDocument.Load(@"D:\xxxxxxxx\XMLFile1.xml");
XNamespace ns = "http://myurl.co.uk/xml/Pages.xsd";
var ele = from data in Xdoc.Descendants(ns + "pages").Elements(ns+"page")
select data;
OR
var namespaceManager = new XmlNamespaceManager(new NameTable());
namespaceManager.AddNamespace("namespace", "http://myurl.co.uk/xml/Pages.xsd");
var name = Xdco.XPathSelectElements("/namespace:pages/namespace:page", namespaceManager);
答案 1 :(得分:1)
这是一种方式:
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(Server.MapPath(@"~\xml\test.xml"));
XmlNamespaceManager xmlnsManager = new XmlNamespaceManager(xmlDoc.NameTable);
xmlnsManager.AddNamespace("def", "http://myurl.co.uk/xml/Pages.xsd");
XmlNodeList NodeList = xmlDoc.SelectNodes("/def:pages/def:page", xmlnsManager);
foreach (XmlNode node in NodeList)
{
}