XSLT соответственно не будет манипулировать файлом XML - PullRequest
0 голосов
/ 29 сентября 2010

Это файл XML:

<?xml version="1.0" ?>
<?xml-stylesheet type="text/xsl" href="LabXSLT.xslt"?>
<orders>
    <order>
        <customerid>2364</customerid>
        <status>pending</status>
        <item instock="Y" itemid="SD93">
            <name>Flying By Roller Skates</name>
            <price>25.00</price>
            <qty>25</qty>
        </item>
        <item instock="N" itemid="B12">
            <name>Bounce-o Ball</name>
            <price>.35</price>
            <qty>150</qty>
        </item>
    </order>
    <order>
        <customerid>5268</customerid>
        <status>complete</status>
        <item instock="Y" itemid="Q52">
            <name>Crash N Burn Skis</name>
            <price>20</price>
            <qty>10</qty>
        </item>
    </order>
</orders>

XSLT-файл:

<xsl:for-each select="orders/order">
    <p>Customer Number:</p>
    <xsl:value-of select="customerid" />
    <p>Name:</p>
    <xsl:value-of select="name" />
</xsl:for-each>

Предполагается, что XSLT-файл должен получить custeomrID и имя и отобразить его. Он получает идентификатор клиента, но не имя. Его поле остается пустым, и похоже, что оно может достичь только двух элементов name. Я думаю, что одна из проблем состоит в том, что в элементе есть 2 элемента. Не знаю, как это сделать. Я также не могу изменить файл XML.

Ответы [ 6 ]

2 голосов
/ 29 сентября 2010

Иногда это помогает исправить отступы в вашем XML, чтобы вы могли видеть иерархию более четко:

<?xml version="1.0" ?>
<?xml-stylesheet type="text/xsl" href="LabXSLT.xslt"?>
<orders>
    <order>
        <customerid>2364</customerid>
        <status>pending</status>
        <item instock="Y" itemid="SD93">
            <name>Flying By Roller Skates</name>
            <price>25.00</price>
            <qty>25</qty>
        </item>
        <item instock="N" itemid="B12">
            <name>Bounce-o Ball</name>
            <price>.35</price>
            <qty>150</qty>
        </item>
    </order>
    <order>
        <customerid>5268</customerid>
        <status>complete</status>
        <item instock="Y" itemid="Q52">
            <name>Crash N Burn Skis</name>
            <price>20</price>
            <qty>10</qty>
        </item>
    </order>
</orders>

Это упрощает понимание того, что вам нужно нацелиться item/name

Редактировать: Чтобы получить доступ к каждому элементу в узле заказа, ваш XSL может выглядеть следующим образом:

<xsl:for-each select="orders/order">
    <p>Customer Number:</p>
    <xsl:value-of select="customerid" />
    <xsl:for-each select="item">
        <p>Name:</p>
        <xsl:value-of select="name" />
    </xsl:for-each>
</xsl:for-each>
0 голосов
/ 30 сентября 2010

Эта таблица стилей:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="customerid|name">
        <p>
            <xsl:apply-templates/>
        </p>
    </xsl:template>
    <xsl:template match="customerid/text()">
        <xsl:value-of select="concat('Customer Number: ',.)"/>
    </xsl:template>
    <xsl:template match="name/text()">
        <xsl:value-of select="concat('Name: ',.)"/>
    </xsl:template>
    <xsl:template match="text()"/>
</xsl:stylesheet>

Выход:

<p>Customer Number: 2364</p>
<p>Name: Flying By Roller Skates</p>
<p>Name: Bounce-o Ball</p>
<p>Customer Number: 5268</p>
<p>Name: Crash N Burn Skis</p>

Примечание : стиль вытягивания, сопоставление с образцом.

0 голосов
/ 29 сентября 2010

То же самое сказал @Casey.Однако, если вы используете

<xsl:value-of select="item/name" />

, вы получите только имя первого элемента, потому что это то, что делает <xsl:value-of>.В зависимости от ваших требований вам может потребоваться изменить это.

0 голосов
/ 29 сентября 2010

поскольку имя находится под тегом item

ваш код должен напечатать имя должно быть

<xsl: value-of select ="item/name"/>
0 голосов
/ 29 сентября 2010

Тег name находится внутри тега item. Так что же делать, если на одного клиента приходится несколько имен?

0 голосов
/ 29 сентября 2010

Элемент name является дочерним элементом элемента. Похоже, не является элементом имени клиента. Это то, что вы пытаетесь сделать, или вам нужно название предмета?

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