C# 在c中访问XSD文件的元素#
我已搜索了S/O,但没有找到任何解决我的问题的方法(尽管有一点帮助)。C# 在c中访问XSD文件的元素#,c#,xml,xsd,C#,Xml,Xsd,我已搜索了S/O,但没有找到任何解决我的问题的方法(尽管有一点帮助)。 在下面的XSD文件中,我需要获取嵌套元素的名称(SectionA,然后到AX010_1、AX040_1..然后到SectionB,再到BX010_1、BX070_1等) 如何访问嵌套元素 <?xml version="1.0" encoding="utf-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefaul
在下面的XSD文件中,我需要获取嵌套元素的名称(SectionA,然后到AX010_1、AX040_1..然后到SectionB,再到BX010_1、BX070_1等) 如何访问嵌套元素
<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
<xs:element name="Vehicle">
<xs:complexType>
<xs:sequence>
<xs:element name="Ford" minOccurs="0" maxOccurs="1">
<xs:complexType>
<xs:sequence>
<xs:element name="SectionA" minOccurs="0" maxOccurs="1">
<xs:complexType>
<xs:sequence>
<xs:element name="AX010_1" type="Dollar" minOccurs="0" maxOccurs="1"/>
<xs:element name="AX040_1" type="Dollar" minOccurs="0" maxOccurs="1"/>
<xs:element name="AX050_1" type="Dollar" minOccurs="0" maxOccurs="1"/>
<xs:element name="AX190_1" type="Dollar" minOccurs="0" maxOccurs="1"/>
<xs:element name="A080_1" type="Dollar" minOccurs="0" maxOccurs="1"/>
<xs:element name="AX230F_1" type="Dollar" minOccurs="0" maxOccurs="1"/>
<xs:element name="AX230G_1" type="Dollar" minOccurs="0" maxOccurs="1"/>
<xs:element name="AX230GNOTE_1" type="ExplanatoryText" minOccurs="0" maxOccurs="1"/>
<xs:element name="AX230H_1" type="Dollar" minOccurs="0" maxOccurs="1"/>
<xs:element name="AX230HNOTE_1" type="ExplanatoryText" minOccurs="0" maxOccurs="1"/>
<xs:element name="AX230J_1" type="ExplanatoryText" minOccurs="0" maxOccurs="1"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="SectionB" minOccurs="0" maxOccurs="1">
<xs:complexType>
<xs:sequence>
<xs:element name="BX010_1" type="Dollar" minOccurs="0" maxOccurs="1"/>
<xs:element name="BX070_1" type="Dollar" minOccurs="0" maxOccurs="1"/>
<xs:element name="BX350N_1" type="Dollar" minOccurs="0" maxOccurs="1"/>
<xs:element name="BX350NNOTE_1" type="ExplanatoryText" minOccurs="0" maxOccurs="1"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="SectionC" minOccurs="0" maxOccurs="1">
<xs:complexType>
<xs:sequence>
<xs:element name="C010_1" type="Dollar" minOccurs="0" maxOccurs="1"/>
<xs:element name="C010_2" type="Dollar" minOccurs="0" maxOccurs="1"/>
<xs:element name="C010_4" type="Dollar" minOccurs="0" maxOccurs="1"/>
<xs:element name="CF030_1" type="Dollar" minOccurs="0" maxOccurs="1"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="SectionD" minOccurs="0" maxOccurs="1">
<xs:complexType>
<xs:sequence>
<xs:element name="D010_1" type="Dollar" minOccurs="0" maxOccurs="1"/>
<xs:element name="D030_2" type="Dollar" minOccurs="0" maxOccurs="1"/>
<xs:element name="D560_1" type="Dollar" minOccurs="0" maxOccurs="1"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
xsd只不过是带有名称空间的xml
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(@"C:\myXsd.xsd");
XmlNamespaceManager nsmgr = new XmlNamespaceManager(xmlDoc.NameTable);
nsmgr.AddNamespace("xs", "http://www.w3.org/2001/XMLSchema");
XmlNodeList nodes =
xmlDoc.SelectNodes("//xs:element[starts-with(@name, 'Section')]/*//xs:element", nsmgr);
List<string> namesList = new List<string>();
foreach (XmlNode node in nodes)
{
namesList.Add(node.Attributes["name"].Value);
}
XmlDocument xmlDoc=new XmlDocument();
Load(@“C:\myXsd.xsd”);
XmlNamespaceManager nsmgr=新的XmlNamespaceManager(xmlDoc.NameTable);
nsmgr.AddNamespace(“xs”http://www.w3.org/2001/XMLSchema");
XmlNodeList节点=
SelectNodes(//xs:element[以(@name,'Section')开头]/*///xs:element”,nsmgr);
列表名称列表=新列表();
foreach(节点中的XmlNode节点)
{
namesList.Add(node.Attributes[“name”].Value);
}
应该会产生所需的输出。xsd只不过是带有名称空间的xml
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(@"C:\myXsd.xsd");
XmlNamespaceManager nsmgr = new XmlNamespaceManager(xmlDoc.NameTable);
nsmgr.AddNamespace("xs", "http://www.w3.org/2001/XMLSchema");
XmlNodeList nodes =
xmlDoc.SelectNodes("//xs:element[starts-with(@name, 'Section')]/*//xs:element", nsmgr);
List<string> namesList = new List<string>();
foreach (XmlNode node in nodes)
{
namesList.Add(node.Attributes["name"].Value);
}
XmlDocument xmlDoc=new XmlDocument();
Load(@“C:\myXsd.xsd”);
XmlNamespaceManager nsmgr=新的XmlNamespaceManager(xmlDoc.NameTable);
nsmgr.AddNamespace(“xs”http://www.w3.org/2001/XMLSchema");
XmlNodeList节点=
SelectNodes(//xs:element[以(@name,'Section')开头]/*///xs:element”,nsmgr);
列表名称列表=新列表();
foreach(节点中的XmlNode节点)
{
namesList.Add(node.Attributes[“name”].Value);
}
应产生所需的输出。读取XSD文件时,有两件事需要考虑:
- 获取名称空间(使用)
- 使用前缀(使用)
- 查找complexType节点
- 找到序列
- 找到元素
- 等等
try
{
var xsd = XDocument.Load("d:\\temp\\input.xsd");
var ns = xsd.Root.GetDefaultNamespace();
var prefix = xsd.Root.GetNamespaceOfPrefix("xs");
// get Vehicle
var vehicle = xsd.Root.Element(prefix + "element");
// get sequence for Ford
var sections = vehicle.Element(prefix + "complexType")
.Element(prefix + "sequence")
// the Ford element
.Element(prefix + "element")
.Element(prefix + "complexType")
.Element(prefix + "sequence")
// elements
.Elements(prefix + "element").ToList();
foreach (var section in sections)
{
Console.WriteLine(section.Attribute("name").Value);
// for each section element
var items = section.Element(prefix + "complexType")
.Element(prefix + "sequence")
// take the test elements
.Elements(prefix + "element");
foreach (var item in items)
{
Console.WriteLine(item.Attribute("name").Value);
// access another attributes or values here
}
}
}
catch (Exception exception)
{
Console.WriteLine(exception.Message);
}
输出为:
SectionA
AX010_1
AX040_1
AX050_1
AX190_1
A080_1
AX230F_1
AX230G_1
AX230GNOTE_1
AX230H_1
AX230HNOTE_1
AX230J_1
SectionB
BX010_1
BX070_1
...
读取XSD文件时,需要考虑两件事:
- 获取名称空间(使用)
- 使用前缀(使用)
- 查找complexType节点
- 找到序列
- 找到元素
- 等等
try
{
var xsd = XDocument.Load("d:\\temp\\input.xsd");
var ns = xsd.Root.GetDefaultNamespace();
var prefix = xsd.Root.GetNamespaceOfPrefix("xs");
// get Vehicle
var vehicle = xsd.Root.Element(prefix + "element");
// get sequence for Ford
var sections = vehicle.Element(prefix + "complexType")
.Element(prefix + "sequence")
// the Ford element
.Element(prefix + "element")
.Element(prefix + "complexType")
.Element(prefix + "sequence")
// elements
.Elements(prefix + "element").ToList();
foreach (var section in sections)
{
Console.WriteLine(section.Attribute("name").Value);
// for each section element
var items = section.Element(prefix + "complexType")
.Element(prefix + "sequence")
// take the test elements
.Elements(prefix + "element");
foreach (var item in items)
{
Console.WriteLine(item.Attribute("name").Value);
// access another attributes or values here
}
}
}
catch (Exception exception)
{
Console.WriteLine(exception.Message);
}
输出为:
SectionA
AX010_1
AX040_1
AX050_1
AX190_1
A080_1
AX230F_1
AX230G_1
AX230GNOTE_1
AX230H_1
AX230HNOTE_1
AX230J_1
SectionB
BX010_1
BX070_1
...
到目前为止,您的代码是什么?递归搜索怎么样?对于文档中的每个XElement,递归搜索所有子元素,直到找到属性名为SectionA的子元素?到目前为止,您的代码是什么?递归搜索怎么样?对于文档中的每个元素,递归搜索所有子元素,直到找到属性名为SectionA?