[英]How to reuse elements from another Schema / Namespace (i.e. XHTML) with XML Schema?
[英]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.