私は xslt を初めて使用するので、これが素朴な質問である場合はご容赦ください。ソース ドキュメント内の部門名を含む要素の値を、その部門名のバリエーションを子としてリストする別のドキュメント内の子要素の値と一致させ、その子の親を現在のノードとして設定して値を取得する必要があります。他の子供たちの。
ソース ドキュメントの例を次に示します。
<sourceRoot>
<sourceElement>foo</sourceElement>
</sourceRoot>
リスト ドキュメントの例を次に示します。
<departments>
<department>
<child1>bar</child1>
<child2>bar2</child2>
<child3>bar3</child3>
</department>
<department>
<child1>baz</child1>
<child2>baz2</child2>
<child3>baz3</child3>
</department>
<department>
<child1>foo</child1>
<child2>foo2</child2>
<child3>foo3</child3>
</department>
</departments>
etc.
これは望ましい結果です:
<child2value>foo2</child2value>
<child3value>foo3</child3value>
私はこのxslを使用しようとしました:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
>
<xsl:output method="xml" indent="yes" omit-xml-declaration="no" encoding="UTF-8"/>
<xsl:preserve-space elements="text"/>
<xsl:variable name="departments" select="document('dept.xml')/departments"/>
<xsl:template match="/">
<xsl:variable name="sourceElement" select="sourceRoot/sourceElement"/>
<xsl:variable name="child1" select="$departments/department/child1"/>
<xsl:variable name="child2" select="$departments/department/child2"/>
<xsl:variable name="child3" select="$departments/department/child3"/>
<xsl:choose>
<xsl:when test="$sourceElement=$child1">
<child2value>
<xsl:value-of select="$departments/department[.]/child2"/>
</child2value>
<child3value>
<xsl:value-of select="$departments/department[.]/child3"/>
</child3value>
</xsl:when>
<xsl:otherwise/>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>
ただし、すべてのdepartment
ノードの子の値を返します。
<child2value>bar2 baz2 foo2</child2value>
<child3value>bar3 baz3 foo3</child3value>
ここでは、ノードを現在のノードに設定する方法に関する重要な概念が欠けていることを知っています。この初心者のためのアドバイスをありがとう。