[英]XML and C# Read Header Info
我有一個XML文件,其中包含一些標頭信息,然后是名稱/值對的長列表。 一旦知道節點名稱,就可以讀取名稱/值對了。
這些就像:
<Doubler_Cal>
<Freq>300000000</Freq>
<Mag>14.71725</Mag>
</Doubler_Cal>
<Doubler_Cal>
<Freq>310000000</Freq>
<Mag>15.25</Mag>
</Doubler_Cal>
<Doubler_Cal>
<Freq>320000000</Freq>
<Mag>16.25</Mag>
</Doubler_Cal>
.
.
.
<Tripler_Stuff>
<Freq>300000000</Freq>
<Mag>13.8</Mag>
</Tripler_Stuff>
<Tripler_Stuff>
<Freq>310000000</Freq>
<Mag>10.15</Mag>
</Tripler_Stuff>
.
.
.
等等.....
我可以使用這樣的XML文檔閱讀器閱讀它們,
XmlNodeList nodes=doc.DocumentElement.SelectNodes("Doubler_Cal");
要么
XmlNodeList nodes=doc.DocumentElement.SelectNodes("Tripler_stuff");
那里沒問題..... 如果我知道這些節點的名稱 (即“ Doubler_Cal”,“ Tripler_Stuff” ...等)
我遇到的問題是試圖弄清楚如何讀取我擁有的XML文檔中的標頭信息。 標頭中是XML文檔包含的值對名稱的列表。
標頭看起來像這樣(請參見下面的完整代碼段)...
我要在這里解析的節點名稱是
<xs:element name="Doubler_Cal">
<xs:element name="Tripler_Stuff">
<xs:element name="This_too_is_possible">
<xs:element name="YetAnotherName">
產生包含以下內容的字符串數組:“ Doubler_Cal”,“ Tripler_Stuff”,“ This_too_is_possible”,“ YetAnotherName”。
一旦知道了這些,就可以使用我的“一個有效的”代碼行來獲取該特定名稱的所有值對。
這是更完整的XML文件的帖子-它不包含所有值對,因為其中有100個。 但是應該足以弄清楚發生了什么。
<NewDataSet>
<xs:schema id="NewDataSet" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:UseCurrentLocale="true">
<xs:complexType>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element name="Doubler_Cal">
<xs:complexType>
<xs:sequence>
<xs:element name="Freq" type="xs:double" />
<xs:element name="Mag" type="xs:double" minOccurs="0" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="Tripler_Stuff">
<xs:complexType>
<xs:sequence>
<xs:element name="Freq" type="xs:double" />
<xs:element name="Mag" type="xs:double" minOccurs="0" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="This_too_is_possible">
<xs:complexType>
<xs:sequence>
<xs:element name="Freq" type="xs:double" />
<xs:element name="Mag" type="xs:double" minOccurs="0" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="YetAnotherName">
<xs:complexType>
<xs:sequence>
<xs:element name="Freq" type="xs:double" />
<xs:element name="Mag" type="xs:double" minOccurs="0" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:choice>
</xs:complexType>
</xs:element>
</xs:schema>
<Doubler_Cal>
<Freq>300000000</Freq>
<Mag>14.71725</Mag>
</Doubler_Cal>
<Doubler_Cal>
<Freq>310000000</Freq>
<Mag>15.25</Mag>
</Doubler_Cal>
<Doubler_Cal>
<Freq>320000000</Freq>
<Mag>16.25</Mag>
</Doubler_Cal>
<Tripler_Stuff>
<Freq>300000000</Freq>
<Mag>13.8</Mag>
</Tripler_Stuff>
<Tripler_Stuff>
<Freq>310000000</Freq>
<Mag>10.15</Mag>
</Tripler_Stuff>
<This_too_is_possible>
<Freq>322000000</Freq>
<Mag>17.25</Mag>
</This_too_is_possible>
<This_too_is_possible>
<Freq>332000000</Freq>
<Mag>18.8</Mag>
</This_too_is_possible>
<This_too_is_possible>
<Freq>334000000</Freq>
<Mag>19.15</Mag>
</This_too_is_possible>
<YetAnotherName>
<Freq>322000000</Freq>
<Mag>17.25</Mag>
</YetAnotherName>
<YetAnotherName>
<Freq>332000000</Freq>
<Mag>18.8</Mag>
</YetAnotherName>
</NewDataSet>
感謝您的幫助,我非常感激。
基於上下文,您似乎正在使用XML文件DataSet.WriteXml(string, XmlWriteMode.WriteSchema)
通過DataSet.WriteXml(string, XmlWriteMode.WriteSchema)
保存DataSet.WriteXml(string, XmlWriteMode.WriteSchema)
。 您應該使用 DataSet.ReadXml
讀取此文件 。 每個值對都是表中的行。
例:
var rhDs = new DataSet();
rhDs.ReadXml("dat.xml");
foreach (DataTable table in rhDs.Tables)
{
Console.WriteLine("Table: {0}\r\n", table.TableName);
foreach (DataColumn column in table.Columns)
{
Console.Write("{0}\t", column.ColumnName);
}
Console.WriteLine("\r\n-----------------------------------------");
foreach (DataRow row in table.Rows)
{
foreach (DataColumn column in table.Columns)
{
Console.Write("{0}\t", row[column]);
}
Console.WriteLine();
}
Console.WriteLine();
Console.WriteLine();
}
印刷品:
Table: Doubler_Cal
Freq Mag
-----------------------------------------
300000000 14.71725
310000000 15.25
320000000 16.25
Table: Tripler_Stuff
Freq Mag
-----------------------------------------
300000000 13.8
310000000 10.15
Table: This_too_is_possible
Freq Mag
-----------------------------------------
322000000 17.25
332000000 18.8
334000000 19.15
Table: YetAnotherName
Freq Mag
-----------------------------------------
322000000 17.25
332000000 18.8
如果您不使用保存的數據集,則您提供的信息看起來像嵌入式XML模式,但是格式不正確。 因此,通過模式解析器解析它會遇到一些問題。 您將必須引用文件中其他地方必須存在的名稱空間。
印刷品:
Doubler_Cal
Tripler_Stuff
This_too_is_possible
YetAnotherName
您也可以通過以下方式使用XmlDocument
進行此操作:
var xd = new XmlDocument();
xd.Load("XMLFile1.xml");
var names = new XmlNamespaceManager(xd.NameTable);
names.AddNamespace("xs", "http://www.w3.org/2001/XMLSchema");
var elementNames = xd.SelectNodes("/NewDataSet/xs:schema/xs:element/xs:complexType/xs:choice/xs:element/@name", names);
foreach (XmlAttribute name in elementNames)
{
Console.WriteLine(name.Value);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.