2014-09-12 2 views
0

ввод XML:как проверить корневой элемент имеют определенный дочерний элемент в xml с помощью xslt?

<body> 
    <ce:sections> 
     <ce:section> 
      <ce:label>1</ce:label> 
      <ce:section-title>Introduction and main results</ce:section-title> 
      <ce:para> The existence of a globally hyperbolic Lorentzian metric on a 
       <mml:math>(3 + 1)</mml:math> 
       -spacetime with closed Cauchy surface excludes all but one differentiable structure on the underlying manifold, as observed by ChernovNemirovski 
       <citegroup>[ 
        <cite> 
         <no>CN13</no> 
         <id>CN</id> 
        </cite> 
       ]</citegroup> 
      </ce:para> 
     </ce:section> 
    </ce:sections> 
</body> 

как проверить <mml:math> .... </mml:math> и <citegroup> ... </citegroup> являются дочерним элементом body/ce:section/ce:sections пути во входном XML с помощью XSLT?

Как получить путь от <mml: math> используя xslt?

+0

В этом примере они не являются _child_ элементами 'ce: section'. Это _descendants_ элемента 'section', но _children_' para'. –

+0

Я согласен, что это не дочерний элемент. его потомком ce: section. Я хочу знать, как получить путь к mml: математике и как проверить, является ли это потомком ce: section? – Anitha

ответ

0

Чтобы проверить, опускается ли один узел от другого, используйте ancestor. Например:

<xsl:template match="mml:math"> 
    <xsl:if test="ancestor::ce:section"> 
    <xsl:text>This math node IS inside a section</xsl:text> 
    </xsl:if> 
</xsl:template> 

Как определить путь ноды было предложено более here. Вы можете найти идеи, которые помогут в этом обсуждении.

+0

Вам не нужен тест. Просто выполните 'match =" mml: match [ancestor :: cd: section] "'. Ваш подход будет «съедать» все * 'mml: math' элементы, а не только те, которые он хочет. – 2014-09-12 13:37:45

+0

Я понял, что вопрос должен быть «задан как« mml: math », как я могу узнать, что он сходит с раздела« ce: section ». Пример демонстрирует, как «предок» отвечает на этот вопрос. Этот шаблон сам по себе бесполезен. Вопросник может приспособить идею к тому, чтобы получить ссылку на любую «mml: math». – biscuit314

+1

Просто угадайте, но, возможно, OP похож на многих процедурных людей, которые приходят в XSLT, кто скажет такие вещи, как «проверить», когда они означают «писать» правила, которые применяются только к ". Если вам действительно нужно «проверить» что-то, конечно, используйте «xsl: if», но, по моему опыту, в большинстве случаев это «запах кода», например, как «xsl: for-each», попытки кодировать XSLT в императивном стиле. – 2014-09-12 16:45:03

Смежные вопросы