我尝试在XSLT中将Json输入转换为XML,但是在进行转换时,我只得到了没有任何父节点的子节点,即“Client”、“ClientApp”、“Payment”和“Bill”节点,它们没有显示在XML输出中,知道模板中缺少了什么才能显示这些节点吗?
模板
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xj="http://camel.apache.org/component/xj"
exclude-result-prefixes="xj">
<xsl:output omit-xml-declaration="no" encoding="UTF-8" method="xml" indent="yes"/>
<xsl:template match="/">
<xsl:apply-templates select="//object"/>
</xsl:template>
<xsl:template match="object[@xj:type != 'object' and @xj:type != 'array' and string-length(@xj:name) > 0]">
<xsl:variable name="name" select="@xj:name"/>
<xsl:element name="{$name}">
<xsl:value-of select="text()"/>
</xsl:element>
</xsl:template>
<xsl:template match="@*|node()"/>
</xsl:stylesheet>
约松
{
"Client": {
"Date": "2022-12-29T09:55:05",
"Lang": "es-CO",
"ClientApp": {
"Org": "COMPANY",
"Name": "NAME COMPANY",
"Version": 1
}
},
"Payment": {
"PaymentId": "00000000-0000-0000-0000-943534532",
"Bill": {
"PaymentId": "00000000-0000-0000-0000-943534532",
"PaymeentNumber": 63703,
"BillId": "00000000-0000-0000-0000-003223439138"
}
}
}
输出XML
<?xml version="1.0" encoding="UTF-8"?>
<Date>2022-12-29T09:55:05</Date>
<Lang>es-CO</Lang>
<Org>COMPANY</Org>
<Name>NAME COMPANY</Name>
<Version>1</Version>
<PaymentId>00000000-0000-0000-0000-943534532</PaymentId>
<PaymentId>00000000-0000-0000-0000-943534532</PaymentId>
<PaymeentNumber>63703</PaymeentNumber>
<BillId>00000000-0000-0000-0000-003223439138</BillId>
XML输入
<?xml version="1.0" encoding="UTF-8"?>
<object
xmlns:xj="http://camel.apache.org/component/xj" xj:type="object">
<object xj:name="Client" xj:type="object">
<object xj:name="Date" xj:type="string">2022-12-29T09:55:05</object>
<object xj:name="Lang" xj:type="string">es-CO</object>
<object xj:name="ClientApp" xj:type="object">
<object xj:name="Org" xj:type="string">COMPANY</object>
<object xj:name="Name" xj:type="string">NAME COMPANY</object>
<object xj:name="Version" xj:type="int">1</object>
</object>
</object>
<object xj:name="Payment" xj:type="object">
<object xj:name="PaymentId" xj:type="string">00000000-0000-0000-0000-943534532</object>
<object xj:name="Bill" xj:type="object">
<object xj:name="PaymentId" xj:type="string">00000000-0000-0000-0000-943534532</object>
<object xj:name="PaymeentNumber" xj:type="int">63703</object>
<object xj:name="BillId" xj:type="string">00000000-0000-0000-0000-003223439138</object>
</object>
</object>
1条答案
按热度按时间omtl5h9j1#
样式表通过
@xj:type != 'object'
predicate 排除父元素。此外,您的方法:将展平结果。如果要保留原始层次结构,请尝试类似以下操作:
XSLT 1.0版本