私は書き込みしようとしているプログラムに少し問題があります。別のプログラムで生成されたXMLファイルを使用しているので、書式は常に同じですが、セクション内のセクションとデータの数は異なります。私は普遍的なものにしようとしています。ここでC#LINQとXMLを別々のセクションで解析する
は、サンプルのXMLです:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml.Linq;
namespace XMLParseDev
{
class XMLParseDev
{
static void Main(string[] args)
{
int sectionCount = 0;
Console.WriteLine(sectionCount);
XDocument xDoc = XDocument.Load(@"C:\Users\test.xml");
//XElement xEle = XElement.Load(@"C:\users\test.xml");
//Application winWord = new Application();
IEnumerable<XElement> xElements = xDoc.Elements();
IEnumerable<XElement> xSectionCount = from xSections in xDoc.Descendants("section") select xSections;
IEnumerable<XElement> xthCount = from xth in xDoc.Descendants("th") select xth;
foreach (XElement s in xSectionCount)
{
//This is to count the number of <section> tags, this part works
sectionCount = sectionCount + 1;
//This was trying to write the value of the <h1> tag but does not
IEnumerable<XElement> xH1 = from xH1Field in xDoc.Descendants("h1") select xH1Field;
Console.WriteLine(xH1.Attributes("h1"));
foreach (XElement th in xthCount)
{
//This was supposed to write the <th> value only for <th> within the <section> but writes them all
Console.WriteLine(th.Value);
}
}
Console.WriteLine(sectionCount);
}
}
}
そして出力:
0
System.Xml.Linq.Extensions+<GetAttributes>d__1
Field
Value
Field
Value
VM Name
RAM Usage
System.Xml.Linq.Extensions+<GetAttributes>d__1
Field
Value
Field
Value
VM Name
RAM Usage
2
<?xml version="1.0" encoding="utf-8" ?>
<hcdata>
<docTitle>Test Health check</docTitle>
<sections>
<section id="1" name="server-overview">
<h1>Server Overview</h1>
<table name="server1">
<th>Field</th>
<th>Value</th>
<tr>
<td>Name</td>
<td>TestESXI1</td>
</tr>
<tr>
<td>RAM</td>
<td>24GB</td>
</tr>
</table>
<table name="server2">
<th>Field</th>
<th>Value</th>
<tr>
<td>Name</td>
<td>TestESXI2</td>
</tr>
<tr>
<td>RAM</td>
<td>16GB</td>
</tr>
</table>
</section>
<section id="2" name="vms">
<h1>Virtual Machine Information</h1>
<table name="vminfo">
<th>VM Name</th>
<th>RAM Usage</th>
<tr>
<td>2K8R2</td>
<td>2048MB</td>
</tr>
<tr>
<td>2K12R2</td>
<td>4096Mb</td>
</tr>
</table>
</section>
</sections>
</hcdata>
そして、ここでは、私は値を試してみて、引っ張っていじりされているいくつかのC#コードであります
基本的に私がしたいのは、XMLをWord文書に変換することです(この質問はWord部分についてではなく、単にdatゲット)。私はHTMLに似たタグを使用して設計の容易さを助けました。
各<section>
タグを個別の部品として処理する必要があります。 私は実行を計画しているので、テーブルの行と列の数を得ることができるので、テーブルを作成してからデータを取り込むことができます(最初にテーブルを正しい次元で作成する必要があるため)。
セクションにも見出し(<h1>
)があります。
私は、このセクションをループするforeachになるループとしてこの計画を立てていましたが、繰り返しでこのセクション内の他のすべてを実行しますが、データ選択を特定のセクションだけにロックする方法はわかりません。
これは意味があり、事前に感謝します。
ありがとう、私はこれを見て – DC5039