0

XSLT を使用して、ある XML ファイルの情報を別の XML ファイルのオプション情報で更新する

usa11.xml を次のように変更した場合:

<?xml version="1.0" encoding="UTF-8"?>
<country>
  <state name="CA">
    <city>
      <street>
        El Comino Ave.
      </street>
  <library>
         library 11111.
        </library>
</city>
<city>
  <street>
    DeAnza Ave.
  </street>
  <library>
          library 22222.
        </library>
</city>
<city>
  <street>
    shoreline Ave.
  </street>
  <library>
         library 33333.
       </library>
</city>

および usaa22.xml は次のようになります。

<?xml version="1.0" encoding="UTF-8"?>
<country>
 <state name="CA">
<city>
       <street>
            El Comino Ave.
       </street>
  <library>
          library AAAAA.
      </library>
     </city>
<city>
       <street>
          DeAnza Ave.
       </street>
  <library>
          library BBBBB.
      </library>
      </city>

次に、usa22.xml の要素値を使用して、通りの名前が同じ場合にのみ usa11.xml のものを置き換えます。次に、次のような出力 usa33.xml を取得します。

<?xml version="1.0" encoding="UTF-8"?>
<country>
  <state name="CA">
   <city>
       <street>
         El Comino Ave.
       </street>
  <library>
          library AAAAA.
      </library>
  </city>
  <city>
       <street>
            DeAnza Ave.
       </street>
  <library>
          library BBBBB.
      </library>
  </city>
  <city>
        <street>
            shoreline Ave.
        </street>
   <library>
            library 33333.
        </library>
   </city>
</state>

Plsは、これを行う方法についてアドバイスを提供しますか??? ここは「El Comino Ave.」の価値を持つ「street」。

usa22.xml で実際の一致を見つけるためのキーまたは ID として使用され、次に要素「library」の値と「library 11111」の値が使用されます。

"El Comino Ave." の一致する通りの値を持つ通りの要素の下。同じ通りの値「El Comino Ave.」に置き換えられます。but diff 「ライブラリ AAAAA」のライブラリ値。usa22.xml で「library BBBBB」になります。

Plsは、xsltを使用してこれを行う方法についてアドバイスを提供しますか???

ありがとう

4

1 に答える 1

0

次のようなことを試してください:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

    <xsl:variable name="u2" select="document('usaa22.xml')"/>
    <xsl:template match="city">
        <xsl:choose>
            <xsl:when test="$u2//city[street=current()/street]">
                <xsl:copy>
                    <xsl:apply-templates select="$u2//city[street=current()/street]/* " />
                </xsl:copy>
            </xsl:when>
            <xsl:otherwise>
                <xsl:copy>
                    <xsl:apply-templates select="@* | node() " />
                </xsl:copy>
            </xsl:otherwise>
        </xsl:choose>
    </xsl:template>

    <xsl:template match="node() | @*">
        <xsl:copy>
            <xsl:apply-templates select="@* | node() " />
        </xsl:copy>
    </xsl:template>
</xsl:stylesheet>

次の出力が生成されます。

<country>
    <state name="CA">
        <city>
            <street>
                El Comino Ave.
            </street>
            <library>
                library AAAAA.
            </library>
        </city>
        <city>
            <street>
                DeAnza Ave.
            </street>
            <library>
                library BBBBB.
            </library>
        </city>
        <city>
            <street>
                shoreline Ave.
            </street>
            <library>
                library 33333.
            </library>
        </city>
    </state>
</country>
于 2013-05-03T19:55:23.780 に答える