JSON中XML的变量替换?

ktca8awb  于 2023-02-26  发布在  其他
关注(0)|答案(2)|浏览(135)

是否可以用变量替换JSON对象中包含的XML的值?
我的设置是:

{
  "language": "en-US",
  "demoXml": "<General><Name>"ABC"</Name><Address>"123 abc"</Address><Language>en-US</Language></General>"
}

我想用变量替换XML中的Language键,而不是硬编码XML中的en-US,我想用它替换Language变量,这可能吗?

t3psigkw

t3psigkw1#

在JavaScript级别,您可以使用template literal

const language = "en-US";
const msg = {
    "language": language,
    "demoXml": `<General>
                  <Name>ABC</Name>
                  <Address>123 abc</Address>
                  <Language>${language}</Language>
                </General>`
}

在XML级别,可以使用实体引用。

nhjlsmyf

nhjlsmyf2#

您向我们展示的JSON格式不正确:“ABC”和“123 abc”周围的引号需要省略,或者转义为\"
如果我们忽略这个问题,下面的XSLT 3.0转换应该可以完成这项工作:

<xsl:transform version="3.0"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:param name="input-uri"/>
<xsl:variable name="json" select="json-doc($input-uri)"/>
<xsl:output method="json" indent="yes"/>

<xsl:template name="xsl:initial-template">
  <xsl:map>
     <xsl:map-entry key="'language'" select="$json?language"/>
     <xsl:map-entry key="'demoXml'">
       <xsl:variable name="final-xml">
         <xsl:apply-templates select="parse-xml($json?demoXml)"/>
       </xsl:variable>
       <xsl:sequence select="serialize($final-xml)"/>
     </xsl:map-entry>
  </xsl:map>
</xsl:template>

<xsl:mode on-no-match="shallow-copy"/>
<xsl:template match="Language">
  <Language><xsl:value-of select="$json?language"/></Language>
</xsl:template>

</xsl:transform>

(Not测试)。

相关问题