От новичка до гуру: Курсы программирования на CyberDuff

Получить атрибут из xml с помощью xslt

У меня есть xml. В этом xml у меня есть узел с именем видео, как показано ниже.

  <product>
 <id>676872</id>
  <weightingram>510</weightingram>
  <volume>0</volume>
  <discountgroup />
 <name>Product name (500 g)</name>
  <vat>10,49</vat>
  <webbestprice extra="webbestprice">0</webbestprice>
  <webreturn extra="webreturn">0</webreturn>
  <weboutdate extra="weboutdate">01-01-2013 00:00:00</weboutdate>
  <webaltitem extra="webaltitem" />
  <filters extra="filters">
    <ISP_WebItem FILTER="Type" FILTERNAME="type" UNITCODE=""/>
    <ISP_WebItem FILTER="Type2" FILTERNAME="500" UNITCODE="g"/>
  </filters>
  <videos extra="videos">
    <YoutubeVideoURL RowNumber="33" ProductID="676872" YoutubeUrl="http://www.youtube.com/watch?v=EjoEIHVk9qM" YoutubeImage="https://img.youtube.com/vi/EjoEIHVk9qM/2.jpg"/>
  </videos>
</product>

приведенный выше xml получается с помощью

<textarea>
<xsl:copy-of select="."/>
</textarea>

Мне нужно получить значение атрибута YoutubeUrl из этого xml. Я пробовал что-то вроде

 <xsl:value-of select="./videos/YoutubeVideoURL[@YoutubeUrl] "/>

но это не работает. Заранее спасибо за помощь.

04.10.2013

  • Вам нужно показать больше контекста в вашем XSL, никто не может догадаться, в каком контексте вы выполняете xsl:value-of, и поэтому не можете даже догадаться, в чем ваша проблема. Показать весь шаблон. 04.10.2013
  • Я согласен с @KevinBrown в том, что вы должны предоставить свое рабочее XML-содержимое, чтобы другие могли понять. 04.10.2013
  • @Мэттью Грин, пожалуйста, найдите правку 04.10.2013
  • @Арун; Я обновил свой тест. Его правильное получение значения... Дайте мне знать, какой шаблон вы установили для получения значения YoutubeUrl 04.10.2013

Ответы:


1

Вы можете написать так

Ваш образец XML-файла

<?xml version="1.0" encoding="UTF-8"?>
<videos extra="videos">
    <YoutubeVideoURL RowNumber="1" ProductID="12452" YoutubeUrl="http://www.youtube.com/watch?v=efhrtgdbo" YoutubeImage="https://img.youtube.com/vi/efhrtgdbo/2.jpg"/>
</videos>

И ваш образец XSL-файла

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml"/>
    <xsl:template match="YoutubeVideoURL">
        <xsl:value-of select="@YoutubeUrl"/>
    </xsl:template>
</xsl:stylesheet>

Окончательный результат

http://www.youtube.com/watch?v=efhrtgdbo

Вот и все

04.10.2013
  • Но у меня есть xslt, в этом xslt ‹xsl:template match=product› здесь я получаю образец xml, как указано в вопросе. Здесь мне нужно получить значение YoutubeUrl. ‹/xsl:шаблон› 04.10.2013
  • Но вы предоставили только </video> xml. Поэтому, основываясь на вашем образце, я могу дать только этот ответ. Вы должны показать свой рабочий XML. 04.10.2013
  • Это правильно... Я сказал, что не могу вызывать ‹xsl:template match=YoutubeVideoURL› внутри ‹xsl:template match=product› 04.10.2013
  • Попробуйте это, если вы можете получить доступ в соответствии с вашей структурой XML: <xsl:value-of select="./videos/YoutubeVideoURL/@YoutubeUrl"/> 04.10.2013

  • 2

    Попробуйте этот код

    <xsl:template match="YoutubeVideoURL">
       <xsl:value-of select="@YoutubeUrl"/>
    </xsl:template>
    

    (or)

    если вы указали шаблон, соответствующий корню "/", используйте приведенный ниже синтаксис.

    <xsl:template match="/">
    
     .....
       <textarea>
          <xsl:copy-of select="." />
       </textarea>
       <p>
       <xsl:value-of select="//videos//YoutubeVideoURL//@YoutubeUrl"/>
       </p>
    </xsl:template>
    

    Copy-of скопирует элемент xml, указанный в выражении выбора. Таким образом, TextArea будет иметь этот элемент xml со своей структурой. И вы используете значение для извлечения атрибута xml, для которого требуется выбор элемента. Значит, это не связано.

    Вы можете использовать любое из решений, упомянутых в этом ответе.

    04.10.2013
  • Я попробовал второй. Но не работает. ‹xsl:value-of select=./videos/YoutubeVideoURL@YoutubeUrl/› 04.10.2013
  • можно попробовать без ./? Начните с видео. А вы пробовали первый? 04.10.2013
  • ‹xsl:value-of select=videos/YoutubeVideoURL@YoutubeUrl/› 04.10.2013
  • @Viji Ваш второй пример не является допустимым выражением XPath. Вам не хватает /. 04.10.2013
  • @Arun: Вы можете использовать это ‹xsl:value-of select=videos/YoutubeVideoURL/@YoutubeUrl/› , я пропустил / в этом. 04.10.2013

  • 3

    В вашем значении вы ищете любые videos/YoutubeVideoURL, которые имеют атрибут @YoutubeUrl. Если вы хотите получить значение @YoutubeUrl, вам нужно вывести его из предиката следующим образом.

    <xsl:value-of select="./videos/YoutubeVideoURL/@YoutubeUrl" />
    

    Это, конечно, предполагает, что ваши пути и шаблоны уже настроены правильно, чтобы найти это значение в его текущей позиции.

    04.10.2013
  • Да Когда я тестирую ‹‹xsl:value-of select=./videos›, он получает результат.. ‹YoutubeVideoURL RowNumber=29 ProductID=80182 YoutubeUrl=youtube.com/watch?v=EjoEIHVk9qM YoutubeImage=img.youtube.com/vi/EjoEIHVk9qM/2.jpg›, но попытка ‹xsl:value-of select=./videos/YoutubeVideoURL/@YoutubeUrl /› не дает любой результат? В чем проблема? 04.10.2013
  • @Arun Я не знаю, в чем проблема, если вы не предоставите больше своих XML и XSL. Когда я беру то, что вы показали для XML, и преобразую его с помощью моего XSL, который ищет указанное мной значение, я получаю URL-адрес. Представленный вами XML является реальным XML, а не фрагментом результирующего дерева? 04.10.2013
  • да, я отредактировал вопрос, пожалуйста, найдите. xml получается, а ‹textarea›‹xsl:copy-of select=./›‹/textarea› 04.10.2013
  • @ Арун, так ты копируешь XML в «текстовое поле»? Я не уверен, что понимаю. Можете ли вы показать больше XSL? Это может помочь сузить проблему. Я думаю, что ваш XML должен быть RTF, но на основе информации трудно сказать. Конечно, все это предполагает, что вы также используете XSLT 1.0. 04.10.2013
  • Новые материалы

    Основы Spring: Bean-компоненты, контейнер и внедрение зависимостей
    Как лего может помочь нашему пониманию Когда мы начинаем использовать Spring, нам бросают много терминов, и может быть трудно понять, что они все означают. Итак, мы разберем основы и будем..

    Отслеживание состояния с течением времени с дифференцированием снимков
    Время от времени что-то происходит и революционизирует часть моего рабочего процесса разработки. Что-то более забавное вместо типичного утомительного и утомительного процесса разработки. В..

    Я предполагаю, что вы имеете в виду методы обработки категориальных данных.
    Я предполагаю, что вы имеете в виду методы обработки категориальных данных. Пожалуйста, проверьте мой пост Инструментарий специалиста по данным для кодирования категориальных переменных в..

    Игра в прятки с данными
    Игра в прятки с данными Я хотел бы, чтобы вы сделали мне одолжение и ответили на следующие вопросы. Гуглить можно в любое время, здесь никто не забивается. Сколько регионов в Гане? А как..

    «Раскрытие математических рассуждений с помощью Microsoft MathPrompter и моделей больших языков»
    TL;DR: MathPrompter от Microsoft показывает, как использовать математические рассуждения с большими языковыми моделями; 4-этапный процесс для улучшения доверия и рассуждений в математических..

    Раскройте свой потенциал в области разработки мобильных приложений: Абсолютная бесплатная серия
    Глава 6: Работа в сети и выборка данных Глава 1: Введение в React Native Глава 2: Основы React Native Глава 3: Создание пользовательского интерфейса с помощью React Native Глава 4:..

    Все о кейсах: Camel, Snake, Kebab & Pascal
    В программировании вы сталкивались с ними при именовании переменной, класса или функции. Поддержание согласованности типов и стилей случаев делает ваш код более читабельным и облегчает совместную..