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

我的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>
  <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中,就像一个符咒!非常感谢!这很有道理,很有魅力!非常感谢!这是有道理的。