Обработка Json текста в xslt для преобразования Xml в html - PullRequest
0 голосов
/ 11 марта 2020

Я пытаюсь преобразовать XML в HTML, и некоторый элемент HTML должен содержать JSON текст в качестве значения атрибута, преобразованного из XML. но при преобразовании я не могу получить правильный вывод для JSON в атрибуте, помогите мне в этом путать из-за ", который является двойной кавычкой

XML:

<?xml version="1.0" encoding="UTF-8"?>
<main>
    <sub id="1" name="A" owner="XXX">text</sub>
    <sub id="2" name="B" owner="yyy">text</sub>
</main>

XSLT

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="3.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
  <html>
  <body>
    <p>
    <xsl:for-each select="main/sub">
        <span>
            <xsl:attribute name="json">
                <xsl:text>{"properties" : [ {</xsl:text>
                <xsl:for-each select="./@*">                    
                    <xsl:if test="name() = 'id'"><xsl:text>"id" : "</xsl:text><xsl:value-of select="." /><xsl:text>",</xsl:text></xsl:if>
                    <xsl:if test="name() = 'name'"><xsl:text>"name" : "</xsl:text><xsl:value-of select="." /><xsl:text>",</xsl:text></xsl:if>
                    <xsl:if test="name() = 'owner'"><xsl:text>"owner" : "</xsl:text><xsl:value-of select="." /><xsl:text>"</xsl:text></xsl:if>
                </xsl:for-each>
                <xsl:text>} ] }</xsl:text>
            </xsl:attribute>            
        </span>
    </xsl:for-each>
   </p>
  </body>
  </html>
</xsl:template>
</xsl:stylesheet>

Фактический результат:

<html>
   <body>
      <p><span json="{&#34;properties&#34; : [ {&#34;id&#34; : &#34;1&#34;,&#34;name&#34; : &#34;A&#34;,&#34;owner&#34; : &#34;XXX&#34;} ] }"></span><span json="{&#34;properties&#34; : [ {&#34;id&#34; : &#34;2&#34;,&#34;name&#34; : &#34;B&#34;,&#34;owner&#34; : &#34;yyy&#34;} ] }"></span></p>
   </body>
</html>

Ожидаемый результат

<html>
   <body>
      <p><span json="{"properties" : [ {"id" : "1","name" : "A","owner" : "XXX"} ] }"></span><span json="{"properties" : [ {"id" : "2","name" : "B","owner" : "yyy"} ] }"></span></p>
   </body>
</html>

1 Ответ

1 голос
/ 11 марта 2020

Ваш ожидаемый результат не является правильно сформированным HTML и не может быть обработан любым парсером HTML, даже если он очень снисходительный. Как узнать, какой из двойных кавычек в атрибуте @ json представляет конец значения атрибута? Таким образом, вам нужно изменить свои ожидания для вывода.

Фактический вывод, в котором экранированные кавычки должны работать нормально.

За исключением того, что это на самом деле не действительно JSON: внутри объекта "{...}" вам нужны пары ключевое слово-значение, а не голое значение.

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