2009-09-25 5 views
0

У меня есть объект XmlDocument в C#, который я преобразовываю, используя XslTransform, в html. В таблице стилей я вставляю атрибут id в тег span, беря id из элемента в XmlDocument. Вот шаблон для элемента:XmlException - атрибут insert дает исключение «неожиданного маркера»

<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 РОМ). Поэтому я беру выбранный элемент в html, создавая диапазон из него и пытаюсь загрузить элемент с помощью XmlLoad():

wordElem.LoadXml (range.htmlText);

Но это дает мне следующее исключение: «598» - это неожиданный токен. Ожидаемый токен равен «» или «». Строка 1, позиция 10. «

И если я перемещаю курсор над range.htmlText, я вижу теги для элемента, а« id »отображается без кавычек, что меня смущает (ieSPAN id = 598 вместо пролетных ид = «598») Для того, чтобы еще больше запутать дело, если вставить пробел или что-то подобное в значении идентификатора в таблице стилей, он отлично работает, а именно:.

<span> 
     <xsl:attribute name="id"><xsl:text> </xsl:text> <xsl:value-of select="@id"></xsl:value-of></xsl:attribute> 
     <xsl:apply-templates/> 
    </span> 

(Уведомление пробел в текстовом элементе xsl :. Теперь, если я перемещаю курсор над range.htmlText, я вижу идентификатор с кавычками, как обычно, в атрибутах (и как он показывает, открываю ли я файл html в блокноте или что-то в этом роде).

Что здесь происходит? Почему я не могу вставить атрибут таким образом и получить результат, приемлемый как xhtml для чтения XmlDocument? Я чувствую, что мне не хватает чего-то фундаментального, но все это меня удивляет, так как я делаю такие преобразования, используя атрибут xsl:, чтобы вставлять атрибуты все время для других типов преобразований xsl. Почему XmlDocument не принимает это значение?

Кстати, не имеет значения, является ли это атрибутом id. я пробовал с атрибутом «class», «style» и т. д., а также с использованием буквенных значений, таких как «стиль» и установки значения «color: red» и т. д. Компилятор всегда жалуется, что это нечетный токен и не включает кавычки для значения, если там нет пробелов или чего-то еще (разрывы строк и т. Д.).

Надеюсь, я предоставил достаточно информации. Любая помощь будет оценена.

В принципе, то, что я хочу выполнить, это установить идентификатор в элементе span в html, выбрать слово в элементе управления webbrowser при загрузке этого документа и получить атрибут id из выбранного элемента. Я выполнил все и действительно могу делать то, что хочу, но только если я использую регулярное выражение, например. чтобы получить значение атрибута, и я хочу иметь возможность использовать XmlDocument вместо этого, чтобы просто получить значение из атрибута напрямую.

Уверен, что я пропустил что-то простое, но если да, пожалуйста, скажите мне.

С уважением,

Андерс

ответ

0

Попробуйте сделать это.

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

Спасибо, но нет, это не имеет никакого значения. Когда я пытаюсь загрузить тег xhtml как xml с помощью метода LoadXml(), компилятор все еще жалуется, что для значения id нет кавычек. Я начинаю думать, что это не работает IHTMLTxtRange. Я создаю диапазон из текущего выделения, а затем использую range.htmlText для получения тегов.Если я смотрю в базовый html-документ, там есть кавычки, но не в range.htmlText ... Есть ли другой способ получить текущий выбор в компоненте webbrowser и тегах в нем (т. Е. Не только текстовом контенте)? – Anders

Смежные вопросы