У меня есть какой-то ужасный xml в следующем формате (анонимно для защиты виновных):
<root>
<outer attribute="myValue">
<middle>
<inner>
arbitrary text<break />more arbitrary text<break />
</inner>
</middle>
</outer>
...
<outer attribute="myValue">
<middle>
<inner>
arbitrary text<break />more arbitrary text
</inner>
</middle>
</outer>
</root>
Самозакрывающиеся узлы представляют собой разрывы абзаца, в то время как перемещение в полностью отдельные внешние/средние/внутренние деревья не имеет никакого значения (и не должно не приводить к разрыву абзаца).
Простое выражение XPath /*/outer/middle/inner/text()
дает мне все текстовые элементы, но я больше не знаю, когда не начинать новый абзац для нового текстового узла. (фактическое выражение далеко не так просто из-за злоупотребления пространством имен и прочего хлама, но в этом суть).
Что было бы лучшим подходом, чтобы обойти этот недостаток и правильно игнорировать разрывы между текстом, не являющиеся абзацами? Есть ли способ, которым я могу также захватить узлы разрыва и идентифицировать их среди текстовых узлов в списке с сохранением порядка?
В качестве дополнительного контекста я работаю в Intersystems Cache, используя API %XML.XPATH.Document (который является оболочкой стандартного SAX, но все еще может иметь ограничения в отношении сложности подхода).
Некоторые ссылки: