在一行中读取所有属性的Xml

  • 本文关键字:属性 Xml 读取 一行 c# xml
  • 更新时间 :
  • 英文 :


我看到很多(显然)有效的xml文件解决方案,结构如下:

<Areas>
<Area>
<SetNr>"0"</SetNr>
<X1>"283.06"</X1>
<Y1>"-39.0490"</Y1>
<X2>"289.17"</X2>
<Y2>"-40.8466"</Y2>
<Peak>"285.50"</Peak>
<PeakArea>"44.860"</PeakArea>
<DeltaH>"44.860"</DeltaH>
</Area>
<Area>
<SetNr>"1"</SetNr>
<X1>"277.68"</X1>
<Y1>"-38.0286"</Y1>
<X2>"280.94"</X2>
<Y2>"-39.2697"</Y2>
<Peak>"279.96"</Peak>
<PeakArea>"9.411"</PeakArea>
<DeltaH>"9.411"</DeltaH>
</Area>
</Areas>

对于这个结构,我发现许多例子(这里,那里等)(使用innerTextSelectSingleNodeGetElementsByTagName等)读取一个-Package在另一个之后,分别访问X1/Y1/等。

但是我的xml文件结构是这样的:

<Areas>
<Area SetNr="0" X1="283.06" Y1="-39.0490" X2="289.17" Y2="-40.8466" Peak="285.50" PeakArea="44.860" DeltaH="44.860" />
<Area SetNr="1" X1="277.68" Y1="-38.0286" X2="280.94" Y2="-39.2697" Peak="279.96" PeakArea="9.411" DeltaH="9.411" />
</Areas>

对于这个结构,上面的解决方案不起作用。有人能帮助我吗?

我正在寻找这样做的可能性

for each(Area in Areas)
{
mySetNr = Area.SetNr
myX1 = Area.X1
...
...
}

mySetNr_0 = Area[0].SetNr
myX1_0 = Area[0].X1
...
...
mySetNr_1 = Area[1].SetNr
myX1_1 = Area[1].X1
...
...

(我知道mySetNr_0等是一个非常糟糕的方式来处理它,这只是为了保持我的问题尽可能短。在我的实际代码中,我显然会使用列表)

我现在是这样处理的。它工作,但我不是很满意它:

// Parameters from my function
string xElements = "Areas";
string xElement = "Area";

XDocument xDoc = XDocument.Load(xPath + xFile);
foreach (var itemElement in xDoc.Element(xElements).Elements(xElement))
{
var x = itemElement.Attributes();
var xx = x.ToList();
List<string> xAttributes = new List<string>();
List<string> xValues = new List<string>();
string[] xValue = new String[] { };
for (int i = 0; i < x.Count(); i++)
{
xAttributes.Add(xx[i].Name.ToString());
xValues.Add(xx[i].Value.ToString()); 
}
writeRow2Access(dbLocation, dbTable, xAttributes, xValues); // further usage of the values
}

试试这个

var strXml =@"<Areas> " +
"<Area SetNr="0" X1="283.06" Y1="-39.0490" X2="289.17" Y2="-40.8466" Peak="285.50" PeakArea="44.860" DeltaH="44.860" /> " +
"<Area SetNr="1" X1="277.68" Y1="-38.0286" X2="280.94" Y2="-39.2697" Peak="279.96" PeakArea="9.411" DeltaH="9.411" />" +
"</Areas>";
XDocument x = XDocument.Parse(strXml);
var tables = x.Descendants("Area");

foreach (var areaAttributes in tables)
{
Console.WriteLine(areaAttributes.Attribute("SetNr").ToString());
Console.WriteLine(areaAttributes.Attribute("X1").ToString());
};

相关内容

  • 没有找到相关文章