проблема с xmlns - PullRequest
       22

проблема с xmlns

2 голосов
/ 19 мая 2010

У меня есть файл xml и файл xslt.

Файл xml имеет атрибут xmlns = "exa: com.test".

Если я удалю этот атрибут в xml, предложения xpath в моем xslt сработают. Но если я оставлю это, не работает.

Я использую следующий код для смешивания xml и xslt:

XslCompiledTransform transformer = new XslCompiledTransform();

transformer.Load(HttpContext.Current.Server.MapPath("xslt\\searchresults.xslt"));  

transformer.Transform(xmlreader, null, utf8stringwriter);

Что я делаю не так? Как я могу смешать xml и xslt, если у xml есть атрибут xmlns сверху?

Ответы [ 2 ]

3 голосов
/ 19 мая 2010

Атрибут xmlns без префиксного имени заменяет пространство имен по умолчанию, поэтому ваш запрос сопоставляет узлы с другим (пустым) пространством имен. Вам необходимо использовать пространство имен с префиксом в запросах XSLT XPath (или XmlNamespaceManager для изолированных запросов XPath), и ваши запросы будут работать снова, как и ожидалось.

В XSLT:

<xsl:stylesheet ... xmlns:exa="exa:com.test">

Затем, предполагая, что вы использовали для сравнения, например, xyz, вы теперь измените свой запрос следующим образом:

<xsl:template match="exa:xyz"> ...

Как правило, вы можете прочитать некоторые документы по пространствам имен XML.

1 голос
/ 19 мая 2010

Следует отметить, что, хотя строка пространства имен должна рассматриваться как точная буквенная строка, которая используется в качестве идентификатора без какого-либо другого значения. Строка должна соответствовать URI IANA, это гарантирует уникальность пространств имен. Некоторые парсеры отказываются анализировать пространства имен, которые не соответствуют.

Также обратите внимание, что поскольку они являются строками http://www.w3.org/1999/xhtml и, например, http://w3.org/1999/xhtml/, для целей пространств имен они представляют собой совершенно разные пространства имен.

Возможно, вы захотите прочитать о том, как работают пространства имен в XML. Насколько мне известно, exa:com.test не является допустимой строкой пространства имен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...