我有这个 XML 。
<?xml version="1.0" encoding="UTF-8"?>
<Result xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNameSpaceschemaLocation="browsenode.xsd">
<Node>
<node-id>1</node-id>
<children count="2">
<id> 2 </id>
<id> 3 </id>
</children>
</Node>
<Node>
<node-id>2</node-id>
<children count="1">
<id> 4 </id>
</children>
</Node>
<Node>
<node-id>3</node-id>
<children count="0">
</children>
</Node>
<Node>
<node-id>4</node-id>
<children count="0">
</children>
</Node>
<Node>
<node-id>5</node-id>
<children count="0">
</children>
</Node>
</Result>
我想把它变成
<?xml version="1.0" encoding="UTF-8"?>
<Result xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNameSpaceschemaLocation="browsenode.xsd">
<Node>
<node-id>1</node-id>
<children count="2">
<id> 2 </id>
<id> 3 </id>
</children>
</Node>
<Node>
<node-id>2</node-id>
<children count="1">
<id> 4 </id>
</children>
</Node>
<Node>
<node-id>3</node-id>
<children count="0">
</children>
</Node>
<Node>
<node-id>4</node-id>
<children count="0">
</children>
</Node>
</Result>
即..给定一个节点ID,我想要所有可以从 i 到达的节点。顶部 XML 是树的扁平化版本。
我试着用这个 XSLT 来做。
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >
<xsl:output method="xml" indent="yes" omit-xml-declaration="yes" />
<xsl:template name="root-matcher" match="/">
<Result>
<query>
Query String
</query>
<xsl:call-template name="matcher">
<xsl:with-param name="nodeValue" select="'1'" />
</xsl:call-template>
</Result>
</xsl:template>
<xsl:template name="matcher">
<xsl:param name="nodeValue" />
<xsl:if test="/Result/Node/node-id[text()=$nodeValue]">
<Node>
<browseNodeId>
<xsl:value-of select="/Result/Node/node-id" />
</browseNodeId>
<children>
<xsl:for-each select="/Result/Node/children/id">
<id>
<xsl:value-of select="." />
</id>
</xsl:for-each>
</children>
</Node>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
有了这个,我只能达到一个层次。1.我如何递归地做到这一点?
我尝试在匹配器模板之后添加,但它不起作用。
- 如何通过 XSLT 获得 children="2" 或 children="0" 属性?
我对 XSLT 非常陌生。事实上,我今天开始了它并试图理解。如果问题很幼稚,请原谅。欢迎任何资源/建议。好心提醒