如何提取Word Xml文档中所有书签的名称

本文关键字:书签 文档 Xml 何提取 提取 Word | 更新日期: 2023-09-27 18:03:12

我有一个Xml格式的单词Document,其中有多个条目,如:

    <aml:annotation aml:id="0" w:type="Word.Bookmark.Start" w:name="CustomerName"/>

我想检索这些文件的集合,但不知道如何通过

    foreach (XElement ann in doc.Root.Descendants(aml + "annotation"))

换句话说,我可以获得所有的注释,但看不到如何过滤以仅检索书签。名称空间amlw声明如下

    XNamespace w = "http://schemas.openxmlformats.org/wordprocessingml/2006/main";
    XNamespace aml = "http://schemas.microsoft.com/aml/2001/core";

有人能推我一下吗?


我解决了以下问题

        XNamespace w = doc.Root.GetNamespaceOfPrefix("w"); 
        XNamespace aml = doc.Root.GetNamespaceOfPrefix("aml");
        foreach (string bookm in doc.Descendants(aml + "annotation")
                                    .Where(e => e.Attributes(w + "type")
                                    .Any(a => a.Value == "Word.Bookmark.Start"))
                                    .Select(b => b.Attribute(w + "name").Value))
        {
             ...
        }

如何提取Word Xml文档中所有书签的名称

var names = from a in doc.Root.Descendants(aml + "annotation"))
            where (string)a.Attribute(w + "type") == "Word.Bookmark.Start"
            select (string)a.Attribute(w + "name");

Lambda语法:

doc.Root.Descendants(aml + "annotation")
        .Where(a => (string)a.Attribute(w + "type") == "Word.Bookmark.Start")
        .Select(a => (string)a.Attribute(w + "name"))

此解决方案不适用于XML,但可能对您有所帮助。

System.Collections.Generic.IEnumerable<BookmarkStart> BookMarks = wordDoc.MainDocumentPart.RootElement.Descendants<BookmarkStart>();
foreach (BookmarkStart current in BookMarks)
{
    //Do some...
}