Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.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
Xslt 根据同级节点的子节点选择的同级节点的属性值选择节点_Xslt_Xslt 1.0 - Fatal编程技术网

Xslt 根据同级节点的子节点选择的同级节点的属性值选择节点

Xslt 根据同级节点的子节点选择的同级节点的属性值选择节点,xslt,xslt-1.0,Xslt,Xslt 1.0,XSLT相对较新。我上过一门课,似乎已经掌握了窍门,但这门课把我难住了 我的组织有一个在不同时间生成XML输出的第三方系统。我们有一个应用XSLT的实用程序,可以将其传递给需要该信息的其他组织。生成的XML有一个类似于下面的部分,其相关数据包含在NodeType1和NodeType2节点中 我们必须首先发送的新信息以TargetElement值为true的NodeType1节点为目标。然后,我们需要选择NodeType2节点,这些节点的ConID属性值与所选NodeType1节点的ConID属性

XSLT相对较新。我上过一门课,似乎已经掌握了窍门,但这门课把我难住了

我的组织有一个在不同时间生成XML输出的第三方系统。我们有一个应用XSLT的实用程序,可以将其传递给需要该信息的其他组织。生成的XML有一个类似于下面的部分,其相关数据包含在NodeType1和NodeType2节点中

我们必须首先发送的新信息以TargetElement值为true的NodeType1节点为目标。然后,我们需要选择NodeType2节点,这些节点的ConID属性值与所选NodeType1节点的ConID属性值相同。在提供的示例中,应选择ConID属性值为123456和964589的NodeType2节点

所以我尝试了几种条件句的组合,但没有成功。我试过的最后一个看起来像

<xsl:apply-template select="NodeType2[./NodeType2/Container/Connection/@ConID = ../NodeType1/Container/Connection[TargetNode = 'True']/Connection/@ConID]

您拥有的是一个交叉引用,XSLT有一个特殊的功能来解析名为的交叉引用

考虑以下示例:

XSLT1.0

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>

<xsl:key name="type2" match="NodeType2/Container" use="Connection/@ConID" />

<xsl:template match="/Section">
    <output>
        <xsl:for-each select="NodeType1/Container[TargetElement='True']">
            <xsl:copy-of select="key('type2', Connection/@ConID)/NameInformation"/>
        </xsl:for-each>
    </output>
</xsl:template>

</xsl:stylesheet>

应用于输入示例,结果将是:

<?xml version="1.0" encoding="UTF-8"?>
<output>
  <NameInformation>
    <First>Jo</First>
    <Last>Shmo</Last>
  </NameInformation>
  <NameInformation>
    <First>What</First>
    <Last>Second</Last>
  </NameInformation>
</output>

乔
Shmo
什么
第二

谢谢!!!我得到了一些额外的XML,但我猜这是因为实际结构比示例更复杂。我在这一点上得到了数据,所以我确信我可以消除额外的数据。我自己解决这个问题会帮助我更好地理解这个概念,所以给我奖金。=)
<?xml version="1.0" encoding="UTF-8"?>
<output>
  <NameInformation>
    <First>Jo</First>
    <Last>Shmo</Last>
  </NameInformation>
  <NameInformation>
    <First>What</First>
    <Last>Second</Last>
  </NameInformation>
</output>