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 回答