【问题标题】:XmlException - inserting attribute gives "unexpected token" exceptionXmlException - 插入属性给出“意外令牌”异常
【发布时间】: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 来直接从属性中获取值。

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

问候,

安德斯

【问题讨论】:

    标签: c# xml


    【解决方案1】:

    尝试这样做。

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

    【讨论】:

    • 谢谢,但不,这没有任何区别。当我尝试使用 LoadXml() 方法将 xhtml 标记加载为 xml 时,编译器仍然抱怨 id 值没有引号。我开始认为是 IHTMLTxtRange 不起作用。我从当前选择创建一个范围,然后使用 range.htmlText 获取标签。如果我在底层 html 文档中查看引号,但在 range.htmlText 中没有...是否有另一种方法可以在 webbrowser 组件中获取当前选择及其中的标签(即不仅仅是文本内容)?
    猜你喜欢
    • 2015-10-27
    • 2018-02-02
    • 2023-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-21
    • 2021-06-26
    • 1970-01-01
    相关资源
    最近更新 更多