У меня есть таблица стилей xslt для обработки некоторых XML данных, предоставленных устаревшей системой. XML Пример:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<contract>
<variable id="info">
<variable id="client">
<variable id="profession" value="0128"/>
<variable id="missingInfo" value="null"/>
<variable id="address">
<variable id="town" value="MADRID"/>
<variable id="street" value="CALLE SAN SEBASTIAN"/>
<variable id="postalCode" value="50505-207"/>
</variable>
<variable id="taxId" value="123456789"/>
<variable id="declineDetails" value="null"/>
</variable>
<variable id="height" value="null"/>
</variable>
<variable id="supplier">
<variable id="phoneNumber" value="1020304050"/>
<variable id="address">
<variable id="town" value="BARCELONA"/>
<variable id="street" value="AVINGUDA DIAGONAL 44"/>
<variable id="postalCode" value="40780-575"/>
</variable>
<variable id="taxId" value="1020304050"/>
<variable id="name" value="STICKS & STONES"/>
<variable id="birthDate" value="null"/>
<variable id="email" value="sticksandstones@beemail.org"/>
</variable>
</contract>
Используемая таблица стилей XSL (упрощенная):
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<result>
<xsl:for-each select="/contract/variable[@id = 'info']/variable[@id = 'client' and variable[@id = 'taxId']/@value != ../variable[@id = 'supplier']/variable[@id = 'taxId']/@value]">
<xsl:variable name="taxId" select="variable[@id = 'taxId']/@value"/>
<contract>
<variable id="info">
<xsl:copy-of select="/contract/variable[@id = 'info']/variable[@id = 'client' and variable[@id = 'taxId']/@value = $taxId]"/>
<xsl:copy-of select="/contract/variable[@id = 'info']/variable[@id != 'client']"/>
</variable>
<xsl:copy-of select="/contract/variable[@id != 'info']"/>
</contract>
</xsl:for-each>
</result>
</xsl:template>
</xsl:stylesheet>
Когда применяется таблица стилей, возникает исключение:
Caused by: net.sf.saxon.trans.XPathException: No closing ';' found for entity or character reference
Пробовал обработать те же данные, заменив % ∓ на букву (допустим E ), все работает как положено. Пример:
<variable id="name" value="STICKS E STONES"/>
Я также пробовал использовать disable-output-escaping , но безуспешно, поскольку кажется, что он совместим только с xsl: value-of инструкции, а не xsl: copy-of инструкции.
Все преобразования без знака амперсанда работают должным образом.
Чего я пытаюсь достичь:
<variable id="name" value="STICKS & STONES"/>
Как сохранить амперсанд в окончательном преобразованном xml?