XSLT вызывает только немедленный любой случай дочерних узлов - PullRequest
1 голос
/ 19 сентября 2019

У меня есть два возможных входных XML, как показано ниже.Я рассчитываю получить только информацию об учетной записи родителей и игнорирую учетную запись в <line>.

При попытке использования //account и .//account оба возвращают все сегменты счета, поэтому соответствующее число равно 2 и 4 длякаждый xml.ожидаемое количество равно 1 и 2 <account>

xml1:

<?xml version="1.0" encoding="UTF-8"?>
<inventory>
  <account>
    <seg1>123</seg1>
    <seg2>qwe</seg2>
  </account>
  <line>
    <account>
      <seg1>123</seg1>
      <seg2>qwe</seg2>
    </account>
  </line>
</inventory>

xml2:

<?xml version="1.0" encoding="UTF-8"?>
<inventory>
  <accounts>
    <account>
        <seg1>123</seg1>
        <seg2>qwe</seg2>
    </account>
    <account>
        <seg1>456</seg1>
        <seg2>abc</seg2>
    </account>
</accounts>
  <line>
    <accounts>
        <account>
            <seg1>123</seg1>
            <seg2>qwe</seg2>
        </account>
        <account>
            <seg1>456</seg1>
            <seg2>abc</seg2>
        </account>
    </accounts>
 </line>
</inventory>

Поэтому я ожидаю прочитать только немедленную информацию об учетной записи и игнорировать учетную записьпод <line> сегментом

1 Ответ

0 голосов
/ 19 сентября 2019

, чтобы удовлетворить xml 1 и 2, используйте

[not(ancestor-or-self::line)]

, вот xslt

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>

    <xsl:template match="/">
        <inventory>
            <xsl:copy-of select="//*[not(ancestor-or-self::line)]/account"/>       
        </inventory>
    </xsl:template>
</xsl:stylesheet>
...