Я пытаюсь разобрать FlowDocument, в котором есть несколько конкретных случаев совпадения шаблонов, с которыми у меня возникают проблемы.
Итак, для документа Xaml ниже (он был создан открытием Word, созданием текста, затем копированием в WPT richtextbox и извлечением FlowDocument Xaml).
<FlowDocument PagePadding="5,0,5,0" AllowDrop="True" NumberSubstitution.CultureSource="User" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
<Span xml:lang="en-us">
<Span.TextDecorations>
<TextDecoration Location="Underline" />
</Span.TextDecorations>
List Item 2
</Span>
<Run>
<Run.TextDecorations>
<TextDecoration Location="Underline" />
</Run.TextDecorations>
List Item 3
</Run>
</FlowDocument>
Используя следующий Xslt, я пытаюсь сопоставить теги Span и Run, которые имеют дочерний узел "TextDecoration" со значением атрибута "Location = Underline".
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt"
xmlns:p="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
exclude-result-prefixes="msxsl">
<xsl:output method="html" indent="yes"/>
<xsl:template match="/">
<html>
<body>
<xsl:apply-templates />
</body>
</html>
</xsl:template>
<xsl:template match="p:FlowDocument">
<xsl:apply-templates />
</xsl:template>
<xsl:template match="p:Run/Run.TextDecorations/TextDecoration[@Location='Underline']">
<u>
<xsl:apply-templates />
</u>
</xsl:template>
</xsl:stylesheet>
Я понимаю, что приведенный выше оператор не будет работать, и если бы он действительно это сделал, он, вероятно, выбрал бы дочерний узел, а не родительский узел, к которому я стремлюсь.
Вывод, который я пытаюсь получить, следующий:
<html xmlns:p="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
<body>
<u>List Item 2</u>
<u>List Item 3</u>
</body>
</html>
У меня также возникают проблемы с совпадением элемента "p: Run / Run.TextDecorations". Используя Visual Studio и пошагово выполняя выполнение, он никогда не находит узел, который я пытаюсь найти.
Любые советы приветствуются! Спасибо!