当前位置: 首页 > 知识库问答 >
问题:

用xsltproc转义XML属性的值

黄修永
2023-03-14

使用xsltproc(XSLT 1.0)我试图逃脱("-

XSL:

<xsl:template match="int:signature">
    "name":"<xsl:value-of select="@name" mode="text"/>",
    ....

原始XML:

<signature name="My &quot;case&quot;" />

输出:

 "name":"My "case"",

这会破坏结果JSON

我尝试过使用str:replace,但没有成功。禁用输出转义=“是”也没有成功。

有什么暗示吗?

--

xsltproc-V

使用libxml 20706、libxslt 10126和libexslt 815

共有2个答案

曹奇文
2023-03-14

这适用于XPath 2.0

"name":"<xsl:value-of select='fn:replace(@name, """", "\\""")' />"

据我所知,xsltproc不支持Xpath 2.0,但EXSLT扩展可能提供相同的功能

丌官寒
2023-03-14

如果你想逃避这种事会有帮助

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="text" omit-xml-declaration="yes" indent="yes"/>
    <xsl:strip-space  elements="*"/>
    <xsl:template match ="signature">
        <xsl:variable name="escape">
            <xsl:call-template name="escape_quot">
                <xsl:with-param name="replace" select="@name"/>
            </xsl:call-template>
        </xsl:variable>
        "name":"<xsl:value-of select="$escape" />",
    </xsl:template>

    <xsl:template name="escape_quot">
        <xsl:param name="replace"/>
        <xsl:choose>
            <xsl:when test="contains($replace,'&quot;')">
                <xsl:value-of select="substring-before($replace,'&quot;')"/>
                <!-- escape quot-->
                <xsl:text>\"</xsl:text> 
                <xsl:call-template name="escape_quot">
                    <xsl:with-param name="replace" select="substring-after($replace,'&quot;')"/>
                </xsl:call-template>
            </xsl:when>
            <xsl:otherwise>
                <xsl:value-of select="$replace"/>
            </xsl:otherwise>
        </xsl:choose>
    </xsl:template>
</xsl:stylesheet>

这将产生惯常的输出。

 "name":"My \"case\"",

更新:
但是将向外的quot更改为撇号还不够吗?

与:

 "name":'<xsl:value-of select="@name" />',

得到:

  "name":'My "case"',

(这应该是有效的JSON)

 类似资料:
  • 作为一个简化的例子,考虑这个有两个字段的表。一个是字符串,另一个是XML。 Source=“MediaConversions” 现在我想查询该表,并将结果作为json,但也要一次性将XML转换为json。 导致 [{"Source":"媒体转换","OrderParameter":" 但我想把它转换成: [{"Source":"MediaConversion","OrderParameter":{

  • 主要内容:XML 属性,XML 属性必须加引号,XML 元素 vs. 属性,我最喜欢的方式,避免 XML 属性?,针对元数据的 XML 属性XML元素具有属性,类似 HTML。 属性(Attribute)提供有关元素的额外信息。 XML 属性 在 HTML 中,属性提供有关元素的额外信息: <img src="computer.gif"> <a href="demo.html"> 属性通常提供不属于数据组成部分的信息。在下面的实例中,文件类型与数据无关,但是对需要处理这个元素的软件来说却很重要:

  • 这个问题最近出现了。我已经使用蚂蚁很久了,我知道我可以“破解”这个问题,但我想问:蚂蚁是否为这个用例提供了一个优雅的解决方案? 问题 当我使用ant复制xml文件并使用“filtering”属性“填充值”时,我如何才能使它自动转义&符号(以及其他xml“特殊字符”)? 上下文 我们让安装人员/实现人员在应用程序的根目录下编辑一个“build.properties”文件,而不是让他们手动编辑各种应用

  • 我试图使用WooCommerce的分层导航属性过滤侧边栏小部件过滤WooCommerce商店中的〜30,000种产品。这需要使用预定义的产品属性分类法,而不是在每个产品的基础上使用自定义属性。 商店里的每种产品都有一个导入的定制“品牌”属性。在导入产品之前,我在wp-admin中创建了一个名为()的属性分类法。然而,进口产品没有将其品牌属性(和术语名称)添加到品牌()分类中。取而代之的是,所有的产

  • 问题内容: 我想将特定节点N的属性X的值解组到struct字段。像这样: http://play.golang.org/p/U6daYJWVUX 据我能够检查,Go不支持此功能。我是正确的,还是我在这里错过了什么? 问题答案: 在您的问题中,您没有提及。我猜您需要将其属性编组为?如果是这样-您可以将A结构更改为以下形式: 甚至更好-定义单独的B结构:

  • 我想从RSS提要中读出一个带有简单XML的特定属性。 项目示例: 我想阅读媒体中的网址:内容。 读取我使用的其他标记:$xml- 读取我尝试的媒体url属性:$xml- 但这只是返回NULL。它与内容有关,内容是一个名称空间。