Как получить дочерний элемент тега с помощью xslt - PullRequest
0 голосов
/ 03 апреля 2019

Я хотел бы получить только <a> дочерний элемент <b> из моего xml-файла с xslt независимо от того, что выше

Однако я получаю все элементы, которые есть в моем xml (и не только то, что меня интересует).Например, если у меня есть:

<x> 
   <z>
      <b>
         <a>my element </a>
      </b>
  </z>
</x>

или просто:

<x> 
    <b>
       <a>my element </a>
    </b>
</x>

Я бы хотел восстановить: мой элемент

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    exclude-result-prefixes="xs"
    version="2.0">



        <xsl:output method="text"/>
           <xsl:template match="x">
                <xsl:for-each select="b/a">
                     <xsl:value-of select="w" /> 
                </xsl:for-each>
          </xsl:template>

 </xsl:stylesheet>

Ответы [ 2 ]

1 голос
/ 03 апреля 2019

Я хотел бы получить только <a> дочерний элемент <b> из моего xml файл с xslt независимо от того, что он выше

Вы были близки. Использование:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
    <xsl:output method="text"/>
    <xsl:template match="text()"/>
    <xsl:template match="b/a">
        <xsl:value-of select="." /> 
    </xsl:template>
</xsl:stylesheet>

Do note : переопределить встроенное правило для текстовых узлов с пустым шаблоном (без вывода). Просто выведите то, что вы хотите, с правилом, точно соответствующим этому.

Тем не менее, я получаю все элементы, которые есть в моем xml

Это предложение странно, потому что вы используете text метод вывода ...

0 голосов
/ 03 апреля 2019

Странно, что вы заранее не знаете структуру входного XML.В любом случае:

<xsl:template match="/">
    <xsl:value-of select="//a" /> 
</xsl:template>

извлечет значение элемента a, независимо от того, где он находится в иерархии входного XML-документа.

Чтобы ограничить это элементом a, который является дочерним для b, используйте:

<xsl:value-of select="//b/a" /> 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...