【发布时间】:2010-05-18 20:36:09
【问题描述】:
我在 C# 中有一个 XmlDocument 对象,我使用 XslTransform 将其转换为 html。在样式表中,我在 span 标记中插入一个 id 属性,从 XmlDocument 中的一个元素中获取 id。这是元素的模板:
<xsl:template match="word">
<span>
<xsl:attribute name="id"><xsl:value-of select="@id"></xsl:value-of></xsl:attribute>
<xsl:apply-templates/>
</span>
</xsl:template>
但是我想将结果文档处理为 xhtml 文档(使用 XmlDocument dom)。所以我在 html 中选取一个元素,从中创建一个范围,并尝试使用 XmlLoad() 加载该元素:
wordElem.LoadXml(range.htmlText);
但这给了我以下异常:“'598' 是一个意外的标记。预期的标记是 '”' 或 '''。第 1 行,位置 10。”
如果我将光标移到 range.htmlText 上,我会看到元素的标签,并且“id”显示不带引号,这让我感到困惑(即 SPAN id=598 而不是 SPAN id="598") .为了进一步混淆这个问题,如果我在样式表中的 id 值中插入一个空格或类似的东西,它就可以正常工作,即:
<span>
<xsl:attribute name="id"><xsl:text> </xsl:text> <xsl:value-of select="@id"></xsl:value-of></xsl:attribute>
<xsl:apply-templates/>
</span>
(注意 xsl:text 元素中的空格)。现在,如果我将光标移到 range.htmlText 上,我会在属性中看到一个带有引号的 id(如果我在记事本或其他东西中打开 html 文件,它会显示)。
这里发生了什么?为什么我不能以这种方式插入属性并获得可以作为 xhtml 接受的结果以供 XmlDocument 读取?我觉得我遗漏了一些基本的东西,但这一切都让我感到惊讶,因为我一直在使用 xsl:attribute 进行这种转换,以便为其他类型的 xsl 转换插入属性。为什么 XmlDocument 不接受这个值?
顺便说一句,如果是 id 属性也没关系。我尝试过使用“class”属性、“style”等,还使用了诸如“style”之类的文字值并将值设置为“color:red”等。编译器总是抱怨它是一个无效的标记,并且不包含值的引号,除非那里有空格或其他东西(换行符等)。
我希望我已经提供了足够的信息。任何帮助将不胜感激。
基本上,我想要完成的是在 html 中的 span 元素中设置一个 id,在加载此文档的 webbrowser 控件中选择一个单词,然后从所选元素中获取 id 属性。我已经完成了所有事情,并且实际上可以做我想做的事,但前提是我使用正则表达式,例如获取属性值,我希望能够使用 XmlDocument 来直接从属性中获取值。
我确定我遗漏了一些简单的东西,但如果是这样,请告诉我。
问候,
安德斯
【问题讨论】: