明確にするために、私は XSLT 1.0 を使用しています。最初に指定しなかったことをお詫びします。
二重引用符を、JSON 文字列に入っても安全な何かに置き換えたい XSLT スタイルシートがあります。私は次のようなことをしようとしています:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" omit-xml-declaration="yes" />
<xsl:strip-space elements="*" />
<xsl:template match="/message">
<xsl:variable name="body"><xsl:value-of select="body"/></xsl:variable>
{
"message" :
{
"body": "<xsl:value-of select="normalize-space($body)"/>"
}
}
</xsl:template>
</xsl:stylesheet>
次のような XML を渡した場合、これは常に問題なく動作します。
<message>
<body>This is a normal string that will not give you any issues</body>
</message>
ただし、完全な HTML を含む本文を扱っていnormalize-space()
ますが、HTML は処理しますが二重引用符は処理しないため、これは問題ではありません。これは私を壊します:
<message>
<body>And so he quoted: "I will break him". The end.</body>
</message>
二重引用符が HTML でエスケープされているか、前にバックスラッシュが付けられているかは気にしません。最終結果が JSON パーサーを通過することを確認する必要があるだけです。
この出力は JSON Lint を渡し、適切な解決策になります (引用符をバックスラッシュします)。
{ "body" : "And so he quoted: \"I will break him\". The end." }