gpt4 book ai didi

.net - xsl :template match doesn't find matches

转载 作者:数据小太阳 更新时间:2023-10-29 01:42:06 28 4
gpt4 key购买 nike

我正在尝试使用 .NET XslCompiledTransform 将一些 Xaml 转换为 HTML,但在让 xslt 匹配 Xaml 标记时遇到了困难。例如,使用此 Xaml 输入:

<FlowDocument PagePadding="5,0,5,0" AllowDrop="True" NumberSubstitution.CultureSource="User" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
<Paragraph>a</Paragraph>
</FlowDocument>

还有这个 xslt:

<?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" 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="FlowDocument">
<xsl:apply-templates />
</xsl:template>

<xsl:template match="Paragraph" >
<p>
<xsl:apply-templates />
</p>
</xsl:template>

我得到这个输出:

<html>
<body>
a
</body>
</html>

而不是预期的:

<html>
<body>
<p>a</p>
</body>
</html>

这会不会是命名空间的问题?这是我第一次尝试 xsl 转换,所以我很茫然。

最佳答案

是的,这是命名空间的问题。输入文档中的所有元素都在命名空间 http://schemas.microsoft.com/winfx/2006/xaml/presentation 中。您的模板正在尝试匹配默认命名空间中的元素,但未找到任何元素。

您需要在转换中声明此命名空间,为其分配一个前缀,然后在旨在匹配该命名空间中的元素的任何模式中使用该前缀。所以你的 XSLT 应该看起来像这样:

<?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:Paragraph" >
<p>
<xsl:apply-templates />
</p>
</xsl:template>

关于.net - xsl :template match doesn't find matches,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/273199/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com