[英]C# LinQ to XML create output
我在这里所做的是将omnipage xml转换为alto xml。 因此,我决定使用C#。
这是我的示例XML文件
<wd l="821" t="283" r="1363" b="394">
<ch l="821" t="312" r="878" b="394" conf="158">n</ch>
<ch l="888" t="312" r="950" b="394" conf="158">o</ch>
<ch l="955" t="283" r="979" b="394" conf="158">i</ch>
<ch l="989" t="312" r="1046" b="394" conf="158">e</ch>
<ch l="1051" t="312" r="1147" b="394" conf="158">m</ch>
<ch l="1157" t="283" r="1219" b="394" conf="158">b</ch>
<ch l="1224" t="312" r="1267" b="394" conf="198">r</ch>
<ch l="1267" t="283" r="1296" b="394" conf="198">i</ch>
<ch l="1306" t="312" r="1363" b="394" conf="158">e</ch>
</wd>
这是我的代码
XDocument document = XDocument.Load(fileName);
var coordinates = from r in document.Descendants("wd").ToList().Where
(r => (string)r.Attribute("l") != "")
select new
{
left = r.Attribute("l").Value,
};
foreach (var item in coordinates)
{
Console.WriteLine(item.left);
}
Console.ReadLine();
我的问题是,当我使用上述类似的简单XML时,它会起作用,但是当我在链接中使用此类的长XML时,它将起作用。
http://pastebin.com/LmDHRzC5
它行不通吗?
但是它也具有wd
标签,并且还具有L
属性。
谢谢。 我将长XML粘贴到pastebin中,因为它太长了。
您在较大的文档上有一个名称空间
<document xmlns="http://www.scansoft.com/omnipage/xml/ssdoc-schema3.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
以下作品
document.Descendants().Where(e => e.Name.LocalName == "wd")
或者,您可以使用LINQ在Search XDocument中使用另一个选项, 而无需知道名称空间
我不会执行所有代码,但这应该可以帮助您入门。 我用xml linq
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;
using System.IO;
namespace ConsoleApplication1
{
class Program
{
const string FILENAME = @"c:\temp\test.xml";
static void Main(string[] args)
{
StreamReader reader = new StreamReader(FILENAME);
//skip xml identification with UTF-16
reader.ReadLine();
XDocument doc = XDocument.Load(reader);
XElement body = doc.Descendants().Where(x => x.Name.LocalName == "body").FirstOrDefault();
XNamespace ns = body.GetDefaultNamespace();
var results = new {
sections = body.Elements(ns + "section").Select(x => new {
l = (int)x.Attribute("l"),
r = (int)x.Attribute("r"),
b = (int)x.Attribute("b"),
runs = x.Descendants(ns + "run").Select(y => new {
wds = y.Elements(ns + "wd").Select(z => new {
chs = z.Elements(ns + "ch").Select(a => new {
l = (int?)a.Attribute("l"),
t = (int?)a.Attribute("t"),
r = (int?)a.Attribute("r"),
b = (int?)a.Attribute("b"),
conf = (int?)a.Attribute("conf"),
value = (string)a
}).ToList()
}).ToList()
}).ToList()
}).ToList(),
dds = body.Elements(ns + "dd").Select(x => new {
l = (int)x.Attribute("l"),
r = (int)x.Attribute("r"),
b = (int)x.Attribute("b"),
paras = x.Elements(ns + "para").Select(y => new {
lns = y.Elements(ns + "ln").Select(z => new {
wds = z.Elements(ns + "wd").Select(a => new {
chs = a.Elements(ns + "ch").Select(b => new {
l = (int?)b.Attribute("l"),
t = (int?)b.Attribute("t"),
r = (int?)b.Attribute("r"),
b = (int?)b.Attribute("b"),
conf = (int?)b.Attribute("conf"),
value = (string)b
}).ToList()
}).ToList()
}).ToList()
}).ToList()
}).ToList(),
};
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.