Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml 使用XSLT生成特定元素的XPath_Xml_Xslt_Xpath - Fatal编程技术网

Xml 使用XSLT生成特定元素的XPath

Xml 使用XSLT生成特定元素的XPath,xml,xslt,xpath,Xml,Xslt,Xpath,我需要帮助创建一个XSL,该XSL将从XML为其生成XPATH 输入到XSL的XML如下所示。Element标记将包含必须获取Xpath的元素的名称。SampleXML将包含必须从中获取XPath的XML: <XMLInput> <Element>FirstName</Element> <SampleXML> <Member> <MemberInfo> <FirstNam

我需要帮助创建一个XSL,该XSL将从XML为其生成XPATH

输入到XSL的XML如下所示。Element标记将包含必须获取Xpath的元素的名称。SampleXML将包含必须从中获取XPath的XML:

<XMLInput>
<Element>FirstName</Element>
<SampleXML>
    <Member>
        <MemberInfo>
            <FirstName>John</FirstName>
            <MiddleName>M</MiddleName>
            <LastName>Doe</LastName>
        </MemberInfo>
        <MemberAddress>
            <State>NY</State>
            <Country>USA</Country>
        </MemberAddress>
    </Member>
</SampleXML>

这里有一种方式可以让你看到它:

XSLT1.0

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" encoding="utf-8"/>

<xsl:template match="/XMLInput">
    <xsl:for-each select="//*[name()=current()/Element]">
        <!-- generate a path up to - but not including - ancestor SampleXML -->
        <xsl:for-each select="ancestor-or-self::*[not(descendant-or-self::SampleXML)]">
            <xsl:text>/</xsl:text>
            <xsl:value-of select="name()"/>
        </xsl:for-each>  
    </xsl:for-each>
</xsl:template>

</xsl:stylesheet>

/
您可能需要添加一个分隔符,以防有多个同名元素

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" encoding="utf-8"/>

<xsl:template match="/XMLInput">
    <xsl:for-each select="//*[name()=current()/Element]">
        <!-- generate a path up to - but not including - ancestor SampleXML -->
        <xsl:for-each select="ancestor-or-self::*[not(descendant-or-self::SampleXML)]">
            <xsl:text>/</xsl:text>
            <xsl:value-of select="name()"/>
        </xsl:for-each>  
    </xsl:for-each>
</xsl:template>

</xsl:stylesheet>