XSL查找公共节点xml

时间:2015-06-16 15:55:45

标签: xml xslt

我必须找到2个XML中的公共节点。我在网上查看了一些示例之后编写了一个XSL,以获得2的交集,但在与Java一起使用时合并时出错。

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" standalone="no" indent="yes"/>
<xsl:param name="V9_XML_PATH" />
<xsl:template match="@*|node()">
    <xsl:copy>
      <xsl:apply-templates select="@*|node()" />
    </xsl:copy>
</xsl:template>

<xsl:template match="schedule">
<xsl:variable name="match" select="/schedule/scheduleItem[measurements/measurement=document($V9_XML_PATH)/schedule/scheduleItem/measurements/measurement]"/>
    <xsl:choose>
        <xsl:when test="$match">
            <xsl:copy-of select="$match"/>
        </xsl:when>
    </xsl:choose>
</xsl:template>
</xsl:stylesheet>

我的2个XML是:

XML1

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<schedule>
  <scheduleItem scheduleId="1" startDate="2013-01-01" stopDate="2037-12-31">
    <measurements>
      <measurement>ADM010000</measurement>
    </measurements>
    <measPeriods>
      <period day="10" duration="10" hour="10" interval="45" minutes="0"/>
    </measPeriods>
  </scheduleItem>
  <scheduleItem scheduleId="2" startDate="2013-01-01" stopDate="2037-12-31">
    <measurements>
      <measurement>ADM020000</measurement>
    </measurements>
    <measPeriods>
      <period day="0" duration="0" hour="0" interval="15" minutes="0"/>
    </measPeriods>
  </scheduleItem>
</schedule>

XML2

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<schedule>
  <scheduleItem scheduleId="1" startDate="2013-01-01" stopDate="2037-12-31">
    <measurements>
      <measurement>ADM010000</measurement>
    </measurements>
    <measPeriods>
      <period day="0" duration="0" hour="0" interval="15" minutes="0"/>
    </measPeriods>
  </scheduleItem>
  <scheduleItem scheduleId="2" startDate="2013-01-01" stopDate="2037-12-31">
    <measurements>
      <measurement>ADM030000</measurement>
    </measurements>
    <measPeriods>
      <period day="0" duration="0" hour="0" interval="15" minutes="0"/>
    </measPeriods>
  </scheduleItem>
</schedule>

预期输出:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<schedule>
  <scheduleItem scheduleId="1" startDate="2013-01-01" stopDate="2037-12-31">
    <measurements>
      <measurement>ADM010000</measurement>
    </measurements>
    <measPeriods>
      <period day="10" duration="10" hour="10" interval="45" minutes="0"/>
    </measPeriods>
  </scheduleItem>
</schedule>

这里V9_XML_PATH =“XML2”作为参数传递给XSL,如果在XML1和XML2中匹配任何标记,我必须从XML1获取记录。请注意预期输出中的period标记。 我不知道是什么问题,它不适用于Java。请帮我找到问题。

1 个答案:

答案 0 :(得分:1)

  

我不知道问题是什么

第二个模板有几个问题:

首先,当您应该在schedule上进行匹配时,您会在scheduleItem上进行匹配。

接下来,定义match变量的方式毫无意义:您想知道其他文档是否包含scheduleItem的{​​{1}}值等于measurement的{​​{1}}当前measurement的值。

最后,您的XML2文档中没有scheduleItem节点。

尝试改为:

measSchedule