如何解决如何使用C#open-xml SDK以json格式从Word Document中获取文本?
我正在尝试使用C#open-xml SDK从Word文档中提取所有文本,并且我想存储每个段落中的样式属性和innerText数据,然后存储一个段落中的每个运行(最终对表也是如此)。
{
"paragraphs":
[
{
"innerText": "","runs": [
{
"runProperties": {},"innerText": ""
}
],"paragraPHProperties": {}
}
],"tables":
[
{
}
]
}
这是所需的结构。
我来自python背景,使用python dict这样做很容易,因为dict中的键值没有严格的类型。但是我对如何在C#中实现这一目标几乎一无所知。
static void Main(string[] args)
{
string fileName = @"<path to file>";
using (WordprocessingDocument myDoc = WordprocessingDocument.Open(fileName,true))
{
IEnumerable<Paragraph> paragraphList = myDoc.MainDocumentPart.Document.Body.Elements().Where(c => c is Paragraph).Cast<Paragraph>();
foreach (Paragraph p in paragraphList)
{
string paragraphInnerText = p.InnerText;
IEnumerable<Run> runList = p.ChildElements.Where(c => c is Run).Cast<Run>();
foreach (Run r in runList)
{
string runInnerText = r.InnerText;
IEnumerable<RunProperties> runProperties = r.ChildElements.Where(c => c is RunProperties).Cast<RunProperties>();
Console.WriteLine("Getting Run Data.");
}
IEnumerable<ParagraPHProperties> paragraPHPropertiesList = p.ChildElements.Where(r => r is ParagraPHProperties).Cast<ParagraPHProperties>();
}
}
Console.WriteLine("All done. Press a key.");
}
这是到目前为止我在一些帮助下提出的代码。
关于如何将其存储为json格式的任何想法,或者应该怎么做? 提前致谢! :)
解决方法
选项A,使用源XML和SerializeXmlNode(JSON.NET)转换所有文档:
XmlDocument doc = new XmlDocument();
doc.LoadXml(myDoc.MainDocumentPart.Document.OuterXml);
var json = JsonConvert.SerializeXmlNode(doc);
选项B,为所有段落创建匿名类型并运行:
IEnumerable<Paragraph> paragraphList = myDoc.MainDocumentPart.Document.Body.Elements().OfType<Paragraph>();
var proj = paragraphList.Select(p => p.ChildElements.OfType<Run>().Select(r => new
{
r.InnerText,runProperties = r.ChildElements.OfType<RunProperties>().FirstOrDefault()?.Select(rp => new { rp.GetType().Name,Val = rp.GetAttributes().FirstOrDefault().Value })
}));
var json = JsonConvert.SerializeObject(proj,Newtonsoft.Json.Formatting.Indented);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。