我有一個XML文檔,必須根據節點的值進行過濾,然後必須以JSON格式返回匹配節點的父節點及其所有子節點。基於節點值過濾XML並使用XSLT轉換爲JSON
XML:
<?xml version="1.0" encoding="UTF-8"?>
<root>
<col-name name="col1Name" />
<col-name name="col2Name" />
<row>
<col>Test1</col>
<col>Test2</col>
</row>
<row>
<col>Test3</col>
<col>Test4</col>
</row>
</root>
XSL:
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
<xsl:output method="text" />
<xsl:template match="/">
{
"filtered-result": [
<xsl:for-each select="//row[col[normalize-space(text()) = 'Test2']]">
<xsl:variable name="columnCount" select="count(./*)" />
{
<xsl:for-each select="./*">
<xsl:variable name="columnIndex" select="position()" />
"<xsl:value-of select="normalize-space(//col-name[$columnIndex]/@name)" />": "<xsl:value-of select="." />"<xsl:if test="$columnIndex < $columnCount">,</xsl:if>
</xsl:for-each>
}<xsl:if test="./following-sibling::*">,</xsl:if>
</xsl:for-each>
]
}
</xsl:template>
</xsl:transform>
輸出:
{
"filtered-result": [
{
"col1Name": "Test1",
"col2Name": "Test2"
}
]
}
我使用SAXON作爲XSLT PR ocessor。
我正在按預期得到結果。有沒有其他方法可以獲得理想的結果?建議感激。
的哪個版本撒克遜你在用嗎?對XSLT和XPath 3.0/3.1中的XML到JSON和JSON序列化有一些新的支持,因此您可以使用9.6或9.7版本,具體取決於版本和版本。 –
@MartinHonnen我正在使用'Saxon HE 9.6.0.7'。我必須研究Xpath 3.0的新功能。 – Beginner