Поскольку документы OOXML, похоже, не соответствуют надлежащим правилам XML, закладка состоит из BookmarkStart
, BookmarkEnd
и произвольного количества элементов между ними; не иерархия, но один поток элементов, которые должны быть перемещены в правильном порядке:Как удалить закладку из документа?
<w:bookmarkStart w:id="4" w:name="Author"/>
<w:r w:rsidR="009878B3"><w:rPr><w:sz w:val="28"/></w:rPr><w:t><</w:t></w:r>
<w:r w:rsidR="005E0909"><w:rPr><w:sz w:val="28"/></w:rPr><w:t xml:space="preserve"> </w:t></w:r>
<w:r w:rsidR="009878B3"><w:rPr><w:sz w:val="28"/></w:rPr><w:t>Author></w:t></w:r>
<w:bookmarkEnd w:id="4"/>
Я уже столкнулся с этой проблемой в связанный с этим вопрос: https://stackoverflow.com/questions/28219201/how-to-get-the-text-of-a-bookmark-as-a-single-string
Но этот вопрос, как я могу полностью удалить закладку из документа, не нарушая ничего? Должен ли я перебирать братьев и сестер из BookmarkStart
, пока не дойду до BookmarkEnd
? Есть ли какой-то полезный API-метод, который компенсирует невозможность использования XML правильно, в результате чего у вас будет только узел Bookmark
, который можно удалить ?!
Если у вас есть контроль над исходными документами, вы можете использовать элементы управления содержимым вместо закладок. Элементы управления контентом намного лучше с точки зрения XML. – JasonPlutext
@JasonPlutext Я никогда не слышал об этом. Я бы приветствовал ответ, основываясь на этом, поскольку мы контролируем документы. –
См. Обычно https://msdn.microsoft.com/en-us/library/bb157891.aspx. Вам понадобится элемент управления расширенным текстовым контентом. Они могут быть вложенными. Добавьте один, используя меню разработчика в Word. Для openxml-sdk см. Https://msdn.microsoft.com/en-us/library/documentformat.openxml.wordprocessing.sdtblock(v=office.14).aspx (обратите внимание, что существует другой класс в зависимости от того, управление содержимым aka sdt является блочным уровнем, встроенным, окружает строку таблицы или ячейку таблицы) – JasonPlutext