2017-03-07 1 views
0
I have a source document: 

<?xml version = "1.0" encoding = "UTF-8"?> 
<Circuit revision="B" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <Block name="Design"> 
     <Data> 
      <Layer name="INDEX_4" Function="PLANE"></Layer> 
      <Layer name="INDEX_9" Function="CORE"></Layer> 
      <Group name="PRIMARY"> 
       <SubGroup name="GROUP_PRIMARY"> 
        <SubLayer Ref="INDEX_4" thickness="0.0350"></SubLayer> 
        <SubLayer Ref="INDEX_9" thickness="0.1000"></SubLayer> 
       </SubGroup> 
      </Group> 
     </Data> 
    </Block> 
</Circuit> 

このスタイルシート(電流を使用して)は、対応する厚さを抽出:Iは、ソース文書有する:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    exclude-result-prefixes="xs" 
    version="2.0"> 
<xsl:template match="/Circuit/Block/Data/Layer"> 
    <xsl:element name="{name()}"> 
     <xsl:attribute name="id"> 
      <xsl:value-of select="@name"/> 
     </xsl:attribute> 
     <xsl:attribute name="Function"> 
      <xsl:value-of select="@Function"/> 
     </xsl:attribute> 
     <xsl:value-of select="/Circuit/Block/Data/Group/SubGroup/SubLayer[@Ref=current()/@name]/@thickness"/> 
    </xsl:element> 
</xsl:template> 
</xsl:stylesheet> 

ここPREVIOUS厚さの値を抽出する第二のスタイルシートは次のとおり両方において

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    exclude-result-prefixes="xs" 
    version="2.0"> 
<xsl:template match="/Circuit/Block/Data/Layer"> 
    <xsl:element name="{name()}"> 
     <xsl:attribute name="id"> 
      <xsl:value-of select="@name"/> 
     </xsl:attribute> 
     <xsl:attribute name="Function"> 
      <xsl:value-of select="@Function"/> 
     </xsl:attribute> 
     <xsl:value-of select="/Circuit/Block/Data/Group/SubGroup/SubLayer[@Ref=preceding-sibling::*[1]/@name]/@thickness"/> 
    </xsl:element> 
</xsl:template> 
</xsl:stylesheet> 

私はこれを得る:

<?xml version="1.0" encoding="UTF-8"?> 
    <Layer id="INDEX_4" Function="PLANE">0.0350</Layer> 
    <Layer id="INDEX_9" Function="CORE">0.1000</Layer> 

前の値を取得するために前の兄弟を試しました。質問は「前の兄弟のコンテキストは何ですか?」と思います。

Layer要素またはSubLayer要素を持つグループは、グループですか?

おかげで任意の述語内

ラルフB

答えて

0

コンテキスト項目がSubLayer要素であるSubLayer[@Ref=preceding-sibling::*[1]/@name]両方@Refのコンテキストならびにpreceding-sibling::*[1]/@nameを有するので、述語前ステップで選択された項目です。テンプレート内で現在一致するLayer要素の相対値を選択する場合は、述部の内部にcurrent()/preceding-sibling::*[1]/@nameを使用する必要があります。

+0

Martin、 これは命の恩人です!私は決してそれを働かなかったでしょう - そして私はそれのための多くの本とウェブサイトを徘徊しました。そのような表現の例をもっと与えるどこかにありますか? –

+0

XSLTとXPath 1.0は15歳以上ですが、XSLTとXPath 2.0は10年近く経っていますので、多くのチュートリアルや書籍があります(https://www.pluralsight.com/courses/を参照)。 xslt-foundation-part1またはhttp://www.cranesoftwrights.com/training/index.htm#ptux –

+0

リンクをありがとう - よく見えます! Ralph B –

関連する問題