XSLT - корневой элемент не установлен - PullRequest
0 голосов
/ 01 декабря 2018

Ошибка получения корневого элемента не установлена ​​на моем XSLT.

Ввод XML:

<?xml version="1.0" encoding="utf-8"?>
<Customer count="1">
  <Record id="123">
    <Data id="123-00">John Smith</Data>
  </Record>
   <Record id="456">
    <Data id="123-00">Mark Doe</Data>
  </Record>
 </Customer>

Требуемый вывод:

<Customer>
    <Record>
        <Name>John Smith<Name>
    </Record>
    <Record>
        <Name>Mark Doe</Name>
    </Record>
</Customer>

Что у меня было до сих пор:

<xsl:template match="/Customer/Record">
    <xsl:for-each select="Data">
    <Customer>
        <Record>        
            <Name><xsl:value-of select="@id='123-00'"/></Name>
        </Record>
    </Customer>
    </xsl:for-each>
</xsl:template>

Я пытался безКод цикла и использовать template match="/" с value-of select="Customer/Record/Name[@id='123-00']", и это работает.Но я знаю, что это не лучший способ его кодировать.

Ответы [ 2 ]

0 голосов
/ 02 декабря 2018

Чтобы ваш код выдает желаемый результат, вам необходимо:

  1. Сделать так, чтобы ваш шаблон соответствовал Customer вместо Record;
  2. Переместить Customerэлемент за пределами инструкция xsl:for-each;
  3. Получить фактическое значение узла Data (то, что у вас сейчас есть, только булев тест):

<xsl:template match="/Customer">
    <Customer>
        <xsl:for-each select="Record">
            <Record>        
                <Name>
                    <xsl:value-of select="Data[@id='123-00']"/>
                </Name>
            </Record>
        </xsl:for-each>
    </Customer>
</xsl:template>
0 голосов
/ 01 декабря 2018

Если вы хотите преобразовать элементы Data в Name элементы и удалить любые атрибуты, тогда используйте

<xsl:template match="Data">
  <Name>
    <xsl:value-of select="."/>
  </Name>
</xsl:template>

Для других элементов вы, кажется, хотите скопировать их без их атрибутов, поэтому добавьте шаблон

<xsl:template match="*">
  <xsl:copy>
    <xsl:apply-templates/>
  </xsl:copy>
</xsl:template>

достаточно: https://xsltfiddle.liberty -development.net / 6qVRKxi

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...