英文:
Convert XML to JSON with XSLT 2.0
问题
你想要将名为"id"的XML元素的非空值转换为字符串,你可以尝试以下修改:
<xsl:template match="id" mode="json">
<xsl:choose>
<xsl:when test=".">
<xsl:text>"<xsl:value-of select="."/>"</xsl:text>
</xsl:when>
</xsl:choose>
</xsl:template>
这将检查"id"元素是否存在并且非空,如果是,则将其值转换为字符串格式。
希望这对你有所帮助。如果你有其他问题,请随时告诉我。
英文:
I have a XSLT that can convert XML to JSON and it works well. But When I'm trying to modify the value type of JSON I'm unable to do so.
Below is my XSLT file code:
<xsl:template match="json:name" mode="json">
<xsl:text/>"<xsl:value-of select="json:encode-string(.)"/>":<xsl:text/>
</xsl:template>
<xsl:template match="json:value" mode="json">
<xsl:choose>
<xsl:when test="node() and not(text())">
<xsl:apply-templates mode="json"/>
</xsl:when>
<xsl:when test="text()">
<xsl:choose>
<xsl:when test="normalize-space(.) ne . or not((string(.) castable as xs:integer and not(starts-with(string(.),'+') or starts-with(string(.),'-')) and not(starts-with(string(.),'0') and not(. = '0'))) or (string(.) castable as xs:decimal and not(starts-with(string(.),'+')) and not(starts-with(.,'-.')) and not(starts-with(.,'.')) and not(starts-with(.,'-0') and not(starts-with(.,'-0.'))) and not(ends-with(.,'.')) and not(starts-with(.,'0') and not(starts-with(.,'0.'))))) and not(. = 'false') and not(. = 'true') and not(. = 'null')">
<xsl:text/>"<xsl:value-of select="json:encode-string(.)"/>"<xsl:text/>
</xsl:when>
<xsl:otherwise>
<xsl:text/><xsl:value-of select="."/><xsl:text/>
</xsl:otherwise>
</xsl:choose>
</xsl:when>
<xsl:otherwise>
<xsl:text>null</xsl:text>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
I want to add a condition that if xml element name is id and it's non-null, then convert it to string.
I tried below thing, but it didn't work.
<xsl:template match="id">
<xsl:choose>
<xsl:when test="id">
<xsl:text/>"<xsl:value-of select="json:encode-string(.)"/>"<xsl:text/>
</xsl:when>
</xsl:choose>
</xsl:template>
How do I iterate over these elements as key-value pair, so I can add conditional logic to value if name matches?
Edit:
Added sample XML:
<?xml version="1.0" encoding="UTF-8"?>
<ns0:TestMe xmlns:ns0="urn:hero:wakanda:Cle:Something">
<root>
<id>123</id>
<field2>345</field2>
<fee>
<totalFee>123</totalFee>
</fee>
</root>
</ns0:TestMe>
Using this XML to JSON converter file: https://github.com/bramstein/xsltjson/blob/master/conf/xml-to-json.xsl
答案1
得分: 1
在与您的问题编辑链接的样式表上下文中,我认为您想要类似以下的内容:
<xsl:template match="json:member[json:name = 'id']/json:value" mode="json">
<xsl:text>"</xsl:text>
<xsl:value-of select="json:encode-string(.)"/>
<xsl:text>"</xsl:text>
</xsl:template>
以获取例如 "id":"123"
而不是例如 "id":123
。
英文:
In the context of the stylesheet linked to from your question edit I think you want something like
<xsl:template match="json:member[json:name = 'id']/json:value" mode="json">
<xsl:text>"</xsl:text>
<xsl:value-of select="json:encode-string(.)"/>
<xsl:text>"</xsl:text>
</xsl:template>
to get e.g. "id":"123"
instead of e.g. "id":123
.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论