XmlException - 插入属性给出“意外令牌”异常

时间:2009-09-25 08:32:58

标签: c# xml

我在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属性并不重要。我尝试过“类”属性,“样式”等,并使用文字值,如“样式”,并将值设置为“颜色:红色”等。编译器总是抱怨它是一个无效的令牌,并且不包含该值的引号,除非在那里有空格或其他内容(换行符等)。

我希望我提供了足够的信息。任何帮助将不胜感激。

基本上,我想要完成的是在html的span元素中设置一个id,在加载了这个文档的webbrowser控件中选择一个单词,并从所选元素中获取id属性。我已经完成了所有事情,并且实际上可以做我想要的事情,但前提是我使用正则表达式,例如获取属性值,我希望能够使用XmlDocument直接从属性中获取值。

我确定我遗漏了一些简单的东西,但如果是这样,请告诉我。

此致

的Anders

1 个答案:

答案 0 :(得分:0)

尝试这样做。

<span id="{@id}">
    Inner Text
</span>