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>

请帮助建议任何想法如何做到这一点???这里的“街道”价值为“El Comino Ave”。

将用作键或 ID 在 usa22.xml 中查找实际匹配项,然后元素“library”的值与“library 11111”的值。

在匹配街道值“El Comino Ave”的街道元素下方。将被相同的街道价值“El Comino Ave”取代。但 diff 库值为“库 AAAAA”。在 usa22.xml 中成为“库 BBBBB”。

请帮助建议任何想法如何使用 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 回答