XSLT 3.0 Json-to-xml with json contain html structure

gpnt7bae  于 2023-08-08  发布在  其他
关注(0)|答案(1)|浏览(102)

我有一个JSON文件,其中也包含HTML标记

{
"process": "Test",
"title": "Json2XML_Conversion",
"content": "<div id=\"contents\"><p class=\"Head\">This need to process as title</p><p class=\"para\">This is child text</p></div>"
}

字符串
我在XSLT中处理了这个问题,如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="3.0">
    
    <xsl:output indent="yes"></xsl:output>
    
    
    <xsl:variable name="text" select="unparsed-text('JsonFile.json', 'UTF-8')"/>
    
    <xsl:template match="/">
        <xsl:message select="$text"></xsl:message>
        <xsl:variable name="XML">
            <xsl:apply-templates select="json-to-xml($text)" mode="copy"/>
        </xsl:variable>
        <Root><xsl:apply-templates select="$XML" mode="ContentTest"/></Root>
    </xsl:template>
    
    <xsl:template match="*[@key]" mode="copy">
        <xsl:element name="{@key}">
            <xsl:choose>
                <xsl:when test="@key = 'content'">
                    <xsl:value-of select="." disable-output-escaping="yes"/>
                </xsl:when>
                <xsl:otherwise><xsl:apply-templates mode="copy"/></xsl:otherwise>
            </xsl:choose>
        </xsl:element>
    </xsl:template>
    
    <xsl:mode on-no-match="shallow-copy" name="ContentTest"/>
    
    <xsl:template match="div" mode="ContentTest">
        <RootElementforContent>
            <xsl:apply-templates mode="#current"/>
        </RootElementforContent>
    </xsl:template>
    
</xsl:stylesheet>


电流输出:

<Root>
   <process>Test</process>
   <title>Json2XML_Conversion</title>
   <content>&lt;div id="contents"&gt;&lt;p class="Head"&gt;This need to process as title&lt;/p&gt;&lt;p class="para"&gt;This is child text&lt;/p&gt;&lt;/div&gt;</content>
</Root>


所需输出:

<Root>
   <process>Test</process>
   <title>Json2XML_Conversion</title>
   <content><RootElementforContent><p class="Head">This need to process as title</p><p class="para">This is child text</p></RootElementforContent></content>
</Root>


这是一个示例输入和输出,我有完整的HTML结构在原始文本中,所以需要检查,它可以在单XSLT中处理。

1rhkuytd

1rhkuytd1#

这样就得到了https://martin-honnen.github.io/xslt3fiddle/中的输出

<xsl:stylesheet 
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  expand-text="yes"
  version="3.0">
  
    <xsl:output indent="yes" />

    <xsl:template match=".">
        <Root>
          <process>{.?process}</process>
          <title>{.?title}</title>
          <content>
            <xsl:sequence select="parse-xml-fragment(.?content)" />
          </content>
        </Root>
    </xsl:template>
    
</xsl:stylesheet>

字符串
产生

<?xml version="1.0" encoding="UTF-8"?>
<Root>
   <process>Test</process>
   <title>Json2XML_Conversion</title>
   <content>
      <div id="contents">
         <p class="Head">This need to process as title</p>
         <p class="para">This is child text</p>
      </div>
   </content>
</Root>

相关问题