Xml 获取特定节点的父节点及其子节点
我的XML结构如下所示:Xml 获取特定节点的父节点及其子节点,xml,xslt,xpath,parent-child,Xml,Xslt,Xpath,Parent Child,我的XML结构如下所示: <Page Depth="1"> <Page Title="Communities" Depth="2"> <Page Title="Blog" iscurrent="true" Depth="3"/> <Page Title="Something" Depth="3"/> <Page Title="Anything" Depth="3"/> </Page> &l
<Page Depth="1">
<Page Title="Communities" Depth="2">
<Page Title="Blog" iscurrent="true" Depth="3"/>
<Page Title="Something" Depth="3"/>
<Page Title="Anything" Depth="3"/>
</Page>
<Page Title="News" Depth="2">
<Page Title="Archived news" Depth="3"/>
</Page>
</Page>
我已尝试应用此模板,但没有得到任何输出:
<xsl:apply-templates mode="Tabs"
select="$sitemap/Page[@iscurrent='true']/parent/*" />
模板不应该是相关的,但无论如何,这里是它的一个基本版本:
<xsl:template mode="Tab" match="*">
<li>
<xsl:if test="@iscurrent = 'true'">
<xsl:attribute name="class">current</xsl:attribute>
</xsl:when>
<xsl:value-of select="@MenuTitle" />
</li>
</xsl:template>
现在的
XPath是
/Page[*[@iscurrent='true']]
“*选择子代和self。XPath是
/Page[*[@iscurrent='true']]
“*选择子代和自身。您想要选择
页面
元素,该元素有一个子页面
,其为当前
属性等于true
:
$sitemap/Page[Page[@iscurrent='true']]
演示:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:variable name="sitemap" select="/Page" />
<xsl:template match="/">
<xsl:apply-templates select="$sitemap/Page[Page[@iscurrent='true']]" />
</xsl:template>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()" />
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
关于这一输入:
<Page Depth="1">
<Page Title="Communities" Depth="2">
<Page Title="Blog" iscurrent="true" Depth="3" />
<Page Title="Something" Depth="3" />
<Page Title="Anything" Depth="3" />
</Page>
<Page Title="News" Depth="2">
<Page Title="Archived news" Depth="3" />
</Page>
</Page>
输出:
<Page Title="Communities" Depth="2">
<Page Title="Blog" iscurrent="true" Depth="3" />
<Page Title="Something" Depth="3" />
<Page Title="Anything" Depth="3" />
</Page>
您想要选择
页面
元素,该元素有一个子页面
,其为当前
属性等于true
:
$sitemap/Page[Page[@iscurrent='true']]
演示:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:variable name="sitemap" select="/Page" />
<xsl:template match="/">
<xsl:apply-templates select="$sitemap/Page[Page[@iscurrent='true']]" />
</xsl:template>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()" />
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
关于这一输入:
<Page Depth="1">
<Page Title="Communities" Depth="2">
<Page Title="Blog" iscurrent="true" Depth="3" />
<Page Title="Something" Depth="3" />
<Page Title="Anything" Depth="3" />
</Page>
<Page Title="News" Depth="2">
<Page Title="Archived news" Depth="3" />
</Page>
</Page>
输出:
<Page Title="Communities" Depth="2">
<Page Title="Blog" iscurrent="true" Depth="3" />
<Page Title="Something" Depth="3" />
<Page Title="Anything" Depth="3" />
</Page>
但是我想要页面的父项[@iscurrent='true']以及父项的子项。您将获得父项。此表达式表示查找具有属性iscurrent设置为true的子元素的页面元素。您写道:“*
选择子元素和self”。我认为不是。从“*选择上下文节点的所有元素子元素”的第2.5节中,我认为这也应该起作用。。。完整的解决方案是:$sitemap/Page[*[@iscurrent='true']]
。XML片段是实际XML文件的片段,包含在sitemap变量中,但我需要页面的父级[@iscurrent='true']以及父级的子级。您将获得父级。此表达式表示查找具有属性iscurrent设置为true的子元素的页面元素。您写道:“*
选择子元素和self”。我认为不是。从“*选择上下文节点的所有元素子元素”的第2.5节中,我认为这也应该起作用。。。完整的解决方案是:$sitemap/Page[*[@iscurrent='true']]
。XML片段是实际XML文件的片段,包含在sitemap variableWorks中,就像一个符咒!非常感谢!这很有道理,很有魅力!非常感谢!这是有道理的。