Как мне преобразовать данный xml с помощью xslt во что-то, как показано ниже - PullRequest
0 голосов
/ 30 января 2019

Если у меня возникла проблема, подобная приведенной ниже

, мне нужно преобразовать XML с использованием XSLT для получения <parent.child>value</parent.child> и <parent.child.grandchild>value</parent.child.grandchild>, если существует granchild.также, если я не хочу, чтобы какой-то конкретный элемент говорил цену, его не нужно печатать ... помогите мне сделать XSLT, пожалуйста?Это должен быть универсальный код, такой, что для любого XML он будет производить следующие выходные данные ... мы должны получить что-то вроде этого .......

<food.name>Strawberry Belgian Waffles</food.name>
    <food.description>
    Light Belgian waffles covered with strawberries and whipped cream
    </food.description>
    <food.calories>900</food.calories>`
and so on..
<?xml version="1.0" encoding="UTF-8"?>
<breakfast_menu>
<food>
    <name>Belgian Waffles</name>
    <price>$5.95</price>
    <description>
   Two of our famous Belgian Waffles with plenty of real maple syrup
   </description>
    <calories>650</calories>
</food>
<food>
    <name>Strawberry Belgian Waffles</name>
    <price>$7.95</price>
    <description>
    Light Belgian waffles covered with strawberries and whipped cream
    </description>
    <calories>900</calories>
</food>
<food>
    <name>Berry-Berry Belgian Waffles</name>
    <price>$8.95</price>
    <description>
    Belgian waffles covered with assorted fresh berries and whipped cream
    </description>
    <calories>900</calories>
</food>
<food>
    <name>French Toast</name>
    <price>$4.50</price>
    <description>
    Thick slices made from our homemade sourdough bread
    </description>
    <calories>600</calories>
</food>
<food>
    <name>Homestyle Breakfast</name>
    <price>$6.95</price>
    <description>
    Two eggs, bacon or sausage, toast, and our ever-popular hash browns
    </description>
    <calories>950</calories>
</food>
</breakfast_menu>

1 Ответ

0 голосов
/ 30 января 2019

Следующая таблица стилей:

XSLT 2.0

<xsl:stylesheet version="2.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="*">
    <xsl:element name="{ancestor::*[parent::*]/concat(name(), '.')}{name()}">
        <xsl:apply-templates/>
    </xsl:element>
</xsl:template>

</xsl:stylesheet>

, примененная к вашему примеру ввода, вернет:

Результат

<?xml version="1.0" encoding="UTF-8"?>
<breakfast_menu>
      <food>
            <food.name>Belgian Waffles</food.name>
            <food.price>$5.95</food.price>
            <food.description>
       Two of our famous Belgian Waffles with plenty of real maple syrup
       </food.description>
            <food.calories>650</food.calories>
      </food>
      <food>
            <food.name>Strawberry Belgian Waffles</food.name>
            <food.price>$7.95</food.price>
            <food.description>
        Light Belgian waffles covered with strawberries and whipped cream
        </food.description>
            <food.calories>900</food.calories>
      </food>
      <food>
            <food.name>Berry-Berry Belgian Waffles</food.name>
            <food.price>$8.95</food.price>
            <food.description>
        Belgian waffles covered with assorted fresh berries and whipped cream
        </food.description>
            <food.calories>900</food.calories>
      </food>
      <food>
            <food.name>French Toast</food.name>
            <food.price>$4.50</food.price>
            <food.description>
        Thick slices made from our homemade sourdough bread
        </food.description>
            <food.calories>600</food.calories>
      </food>
      <food>
            <food.name>Homestyle Breakfast</food.name>
            <food.price>$6.95</food.price>
            <food.description>
        Two eggs, bacon or sausage, toast, and our ever-popular hash browns
        </food.description>
            <food.calories>950</food.calories>
      </food>
</breakfast_menu>

Если вы не хотите, чтобы такой элемент, как price, был включен, просто добавьте пустой шаблон, соответствующий ему.

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