0

このソース XML ツリーがあります。

<?xml version="1.0" encoding="UTF-8"?>
<root>
  <foo>
    <bar>
      <baz>
        <item>
          <methods>
            <item>
              <id>1</id>
            </item>
          </methods>
          <id>1</id>
        </item>
        <item>
          <methods>
            <item>
              <id>19</id>
            </item>
          </methods>
          <id>2</id>
        </item>
      </baz>
    </bar>
  </foo>
  <bar_method>
    <root>
      <bla id="1">
        <methods>
          <method id="1">
            <calc md="ck" />
            <tm m="14" />
            <price_list>
              <price mse="0">
                <ins re="0" />
              </price>
            </price_list>
          </method>
          <method id="2">
            <calc md="qck" />
            <tm m="4" />
            <price_list>
              <price mse="1">
                <ins re="0" />
              </price>
            </price_list>
          </method>
        </methods>
      </bla>
      <bla id="2">
        <methods>
          <method id="19">
            <calc md="dd" />
            <tm m="3" />
            <price_list>
              <price mse="01">
                <ins re="0" />
              </price>
            </price_list>
          </method>
        </methods>
      </bla>
    </root>
  </bar_method>
</root>

ここで、XPath を使用して、このツリーのフラグメントを変数に配置する必要があります。フラグメントは次のようになります。

<bla id="1">
  <methods>
    <method id="1">
      <calc md="ck" />
      <tm m="14" />
      <price_list>
        <price mse="0">
          <ins re="0" />
        </price>
      </price_list>
    </method>
  </methods>
</bla>
<bla id="2">
  <methods>
    <method id="19">
      <calc md="dd" />
      <tm m="3" />
      <price_list>
        <price mse="01">
          <ins re="0" />
        </price>
      </price_list>
    </method>
  </methods>
</bla>

これらはblaノードを除くmethodノードであり、idその属性は にありません/root/foo/bar/baz/item/methods/item/id。次の式を使用しますが、重複のあるすべてのノードを選択します。

<xsl:variable name="meth" select="/root/bar_method/root//*[not(name() = 'method' and count(/root/foo/bar/baz//methods/item[id = @id]) = 0)]" />
4

2 に答える 2