0

私はこの例のxmlを持っています:

<tr:secmain>
    <fn:footnote num ="1">
    <fn:footnote num ="2">
    <fn:footnote num ="3">
    <fn:footnote num ="3">
    <fn:footnote num ="5">
</tr:secmain>
<tr:secmain>
    <fn:footnote num ="1">
    <fn:footnote num ="2">
    <fn:footnote num ="3">
    <fn:footnote num ="4">
    <fn:footnote num ="6">
</tr:secmain>

すべての要素について、すべての脚注が正しいかどうかを確認する必要があり、エラーが見つかった場合は、この行が表示される場所を確認する必要があります。この例では、行エラーは行 5 と行 13 です。

現在、Linq を使用してエラーをチェックしています。すべての数字を他のテキスト ファイルに抽出し、この方法で間違った行をチェックしています。

int[] IncorrectLines(string filename)
{
    // Parse the file into an array of ints, 10* each version number.
    var ints = File.ReadLines(filename)
    .Select(s => (int)(10 * decimal.Parse(s))).ToArray();
    // Pair each number up with the previous one.
    var pairs = ints
    .Zip(ints.Skip(1), (p, c) => new { Current = c, Previous = p });
    // Include the line numbers
    var withLineNos = pairs
    .Select((pair, index) => new { Pair = pair, LineNo = index + 2 });
    // Only keep incorrect lines
    var incorrect = withLineNos.Where(o =>
    o.Pair.Current - 1 != o.Pair.Previous && // not a simple increment
    o.Pair.Current % 10 != 0);               // not a whole new version
    // Return the line numbers; could return (double)o.Pair.Current / 10 instead.
    return incorrect.Select(o => o.LineNo).ToArray();
} 

しかし、すべての tr:secmain のシーケンスを確認する必要があるため、現在問題が発生しています

アドバイスありがとうございます。:)

編集:

脚注は次の順序にすることができます: (単なるサンプル)

1
2
    2.1
    2.2
    2.3
3
    3.1
    3.2
    3.3
    3.4
    3.5
    3.7
4
5

etc.
4

1 に答える 1

0

属性の順序を確認しないでください。次のように並べてください。

string xml =
@"<tr>
    <footnote num =""5""/>
    <footnote num =""3""/>
    <footnote num =""2""/>
    <footnote num =""3""/>
    <footnote num =""1""/>
</tr>
";


var xdoc = XDocument.Parse(xml);

var results =
xdoc.Element("tr")
    .Descendants()
    .OrderBy (x => x.FirstAttribute.Value);

results.ToList()
       .ForEach(element => Console.WriteLine (element));/* Ouputs:

<footnote num="1" />
<footnote num="2" />
<footnote num="3" />
<footnote num="3" />
<footnote num="5" />

*/
于 2012-12-08T16:34:22.663 に答える