У меня есть .xslt, который переводит xml из одной формы в другую (я не использую и xsd, поэтому я не буду говорить из одной схемы в другую). Моя проблема в том, что исходная кодировка файла & apos; теряется в переводе. Это вызывает у меня проблему, потому что в моей базе данных имена хранятся с использованием символа апостроф, а не символа одинарной кавычки, и когда я выполняю обновление с этими новыми данными, имена не совпадают, потому что в базе данных есть апострофы в именах и Код обновления Java, который читает мой переведенный XML-файл, содержит одинарные кавычки.
Исходный файл имеет различные списки элементов карты, которые выглядят так (обратите внимание на значение элемента name):
<card>
<cost>4BB</cost>
<color>Black</color>
<expansion-set>
<rarity>R</rarity>
<abbreviation>UD</abbreviation>
</expansion-set>
<type>Enchantment</type>
<ruling>Vintage tournaments (see Rule 901) have restricted this
card since 1999/10/01.</ruling>
<ruling>Legacy tournaments (see Rule 902) have banned this card
since 1999/10/01.</ruling>
<ruling>Extended tournaments (see Rule 903) have banned this
card since 1999/08/01.</ruling>
<note>Note - Also see Skip, Rule G19.11.</note>
<text>Text(UD): Skip your draw step. ; Pay 1 life: Draw a card.</text>
<name>Yawgmoth's Bargain</name>
</card>
Это то, что шаблон xslt соответствует элементам карты и создает новую форму, которую я ищу:
<xsl:template match="card">
<card name="{name}">
<!-- Add the card name -->
<!-- <xsl:attribute name="name">
<xsl:value-of select="name"/>
</xsl:attribute>
<cardname><xsl:value-of select="name"/></cardname> -->
<!-- Add the card's rulings -->
<xsl:apply-templates select="ruling"/>
<!-- Add the card's notes -->
<xsl:apply-templates select="note"/>
</card>
</xsl:template>
Как видите, я не переношу все, что мне нужно, и превращаю элемент name в атрибут (я пытался сохранить имя как элемент, но вижу ту же проблему). Закомментированные части - это другие попытки, которые я предпринял, чтобы получить желаемый вывод (текущее преобразование и все закомментированные все приводят к одинаковому использованию одинарной кавычки, а не апострофа).
Вот как элемент карты выглядит в переведенном выводе (обратите внимание на другое значение атрибута name):
<card name="Yawgmoth's Bargain">
<ruling ruleref="901">Vintage tournaments (see Rule 901) have restricted this card since 1999/10/01.</ruling>
<ruling ruleref="902">Legacy tournaments (see Rule 902) have banned this card since 1999/10/01.</ruling>
<ruling ruleref="903">Extended tournaments (see Rule 903) have banned this card since 1999/08/01.</ruling>
<note ruleref="G19.11">Note - Also see Skip, Rule G19.11.</note>
</card>
Теперь, когда мой код обновления базы данных (написанный на Java) читает в этом XML, сделка Yawgmoth содержит символ одинарной кавычки в строке, но база данных, которую я создал, имеет имя с использованием символа апостроф. Излишне говорить, что мой код обновления не совпадает с названиями карт.
Что является причиной потери точности в преобразовании xsl?
спасибо,
Ian