繁体   English   中英

如何从具有名称空间和架构的XML文档中提取元素的集合

[英]How to pull a collection of elements from XML document that has a namespace and schema

尝试从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" );

我正在为此扯头发。 如果您能提供任何帮助,在我拼命抢夺时,我将尽量避免摔伤您的手臂。

亲切的祝福〜帕特里克

 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;

要么

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

这是一种方法:

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)
{

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM