查询不同路径的相同元素名
Query identical element name with different paths
我尝试在整个导入的 JSON 文件中使用唯一的元素名称,但有时我会有层次结构,其中元素名称相同但元素位于同一地图中的不同位置。
我得到了想要的结果,但想知道是否有更好的方法来查询地图以查找具有相同元素名称但具有特定位置的节点。
查询不需要在同一个模板中或“for-each”。可以单独触发查询。
数据:
<data>
{
"store1": {
"pencils": 2
},
"store2": {
"pencils": 5
}
}
</data>
XSL:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:transform version="3.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns="http://www.w3.org/1999/xhtml"
xmlns:fn="http://www.w3.org/2005/xpath-functions"
xmlns:map="http://www.w3.org/2005/xpath-functions/map"
xmlns:array="http://www.w3.org/2005/xpath-functions/array"
exclude-result-prefixes="fn array map"
expand-text="yes"
>
<xsl:output method="xml" indent="yes"/>
<xsl:mode on-no-match="shallow-skip"/>
<!-- Parse JSON to XML -->
<xsl:template match="data">
<store>
<xsl:apply-templates select="json-to-xml(.)/*"/>
</store>
</xsl:template>
<xsl:template match="*[@key='store1']">
<xsl:copy-of select="*[@key='pencils']"></xsl:copy-of>
</xsl:template>
<xsl:template match="*[@key='store2']">
<xsl:copy-of select="*[@key='pencils']"></xsl:copy-of>
</xsl:template>
</xsl:transform>
结果:
<?xml version="1.0" encoding="UTF-8"?>
<store xmlns="http://www.w3.org/1999/xhtml">
<number xmlns="http://www.w3.org/2005/xpath-functions" key="pencils">2</number>
<number xmlns="http://www.w3.org/2005/xpath-functions" key="pencils">5</number>
</store>
你的意思是这样的吗?:
<xsl:template match="*[*[@key='pencils']]">
<xsl:copy-of select="*[@key='pencils']"/>
</xsl:template>
我尝试在整个导入的 JSON 文件中使用唯一的元素名称,但有时我会有层次结构,其中元素名称相同但元素位于同一地图中的不同位置。
我得到了想要的结果,但想知道是否有更好的方法来查询地图以查找具有相同元素名称但具有特定位置的节点。
查询不需要在同一个模板中或“for-each”。可以单独触发查询。
数据:
<data>
{
"store1": {
"pencils": 2
},
"store2": {
"pencils": 5
}
}
</data>
XSL:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:transform version="3.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns="http://www.w3.org/1999/xhtml"
xmlns:fn="http://www.w3.org/2005/xpath-functions"
xmlns:map="http://www.w3.org/2005/xpath-functions/map"
xmlns:array="http://www.w3.org/2005/xpath-functions/array"
exclude-result-prefixes="fn array map"
expand-text="yes"
>
<xsl:output method="xml" indent="yes"/>
<xsl:mode on-no-match="shallow-skip"/>
<!-- Parse JSON to XML -->
<xsl:template match="data">
<store>
<xsl:apply-templates select="json-to-xml(.)/*"/>
</store>
</xsl:template>
<xsl:template match="*[@key='store1']">
<xsl:copy-of select="*[@key='pencils']"></xsl:copy-of>
</xsl:template>
<xsl:template match="*[@key='store2']">
<xsl:copy-of select="*[@key='pencils']"></xsl:copy-of>
</xsl:template>
</xsl:transform>
结果:
<?xml version="1.0" encoding="UTF-8"?>
<store xmlns="http://www.w3.org/1999/xhtml">
<number xmlns="http://www.w3.org/2005/xpath-functions" key="pencils">2</number>
<number xmlns="http://www.w3.org/2005/xpath-functions" key="pencils">5</number>
</store>
你的意思是这样的吗?:
<xsl:template match="*[*[@key='pencils']]">
<xsl:copy-of select="*[@key='pencils']"/>
</xsl:template>