XSLT конвертирует мои шестнадцатеричные атрибуты во что-то еще, как мне это остановить? - PullRequest
3 голосов
/ 28 июля 2010

Я пытаюсь преобразовать один xml-файл для вывода другого xml-файла, и мне нужно, чтобы атрибут «account» выводился идентично тому, как это показано ниже.У меня есть куча этих значений в файле, большинство не работает.

Для значений счета, таких как 0x0406, он выводится как 0.0.06.Но для таких значений, как 0x002d, он оставляет их в покое, и они идут так, как я хочу.

Есть идеи?

Исходный XML:

<?xml version="1.0" encoding="UTF-8"?>
...
<foo account="0x0406" other-stuff="blah" something-name="blah again"/>
...

Это мой шаблон xslt:

<xsl:stylesheet version="1.0"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:msxsl="urn:schemas-microsoft-com:xslt"
  xmlns:user="http://some-internal-thing/user">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes" omit-xml-declaration="yes"/>
...
<xsl:attribute name="account"><xsl:value-of select="@account"/></xsl:attribute>
...

Ответы [ 2 ]

2 голосов
/ 28 июля 2010

Невозможно воспроизвести описанную проблему .

Я выполнил следующее преобразование с 10 различными процессорами xslt (Msxml3, Msxml4, Msxml6, .NET XslTransform,.NET XslCompiledTransform, AltovaXml (для XSLT 1.01.0), Saxon6.5.4, Saxon 9.1.07, Saxon 9.1.07.NET и XML-SPY-XSLT2.0), и они все дают одинаковый правильный результат .

<xsl:stylesheet version="1.0"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:msxsl="urn:schemas-microsoft-com:xslt"
  xmlns:user="http://some-internal-thing/user">
 <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes" omit-xml-declaration="yes"/>

 <xsl:template match="/*">
   <xsl:copy>
    <xsl:attribute name="account"><xsl:value-of select="@account"/></xsl:attribute>
   </xsl:copy>
 </xsl:template>
</xsl:stylesheet>

при выполнении этого преобразования в следующем XML-документе :

<?xml version="1.0" encoding="UTF-8"?>
<foo account="0x0406" other-stuff="blah" something-name="blah again"/>

ожидаемый, правильный результат будет получен :

<foo account="0x0406" />

В случае, если ваш XSLT-процессор не является одним из них, и вы действительно получили неправильный результат, это ошибка, о которой следует сообщить поставщикам.

0 голосов
/ 28 июля 2010

Можете ли вы попробовать изменить кодировку? Например, «ASCII» вместо «UTF-8».

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