Сложная обработка XML с помощью XSL - PullRequest
0 голосов
/ 09 марта 2012

Я новичок в XSLT и получил новое задание по использованию XML и XSLT.

У меня есть XML-файл, в котором есть дочерний и дочерний элементы.

Теперь, когда я портирую xml, используя xsl, он отлично работает для родительского узла, но для дочернего узла я не получаю никаких данных. XML-файл:

<jrnl:bodytext>
        <level>
            <bodytext>
                <pgrp>
                    <heading>
                        <title>
                            <emph typestyle="bf">1. Orange</emph>
                        </title>
                    </heading>
                    <p>
                        <text>Paragraph 1</text>
                    </p>
                    <p>
                        <text>Paragraph 2<text>
                    </p>
                    <p>
                        <text>Paragraph 3</text>
                    </p>



                </pgrp>
                <pgrp>
                    <heading>
                        <title>
                            <emph typestyle="bf">2. Apple </emph>
                        </title>
                    </heading>
                    <pgrp>
                        <heading>
                            <title>(a) Introduction</title>
                        </heading>
                        <p>
                            <text>Paragraph 1</text>
                        </p>
                    </pgrp>
                    <pgrp>
                        <heading>
                            <title>(b) The Facts</title>
                        </heading>
                        <p>
                            <text>Paragraph 2</text>
                        </p>
                        <p>
                            <text>Paragraph 3</text>
                        </p>


                    </pgrp>
                    <pgrp>
                        <heading>
                            <title>(c) Mango</title>
                        </heading>
                        <p>
                            <text>Paragraph 1</text>
                        </p>
                        <p>
                            <text>Paragraph 2</fnr>
                            </text>
                        </p>
                        <p>
                            <text>Paragraph 3</text>
                        </p>

                    </pgrp>
                    <pgrp>
                        <heading>
                            <title>(d) Misreading of Authority</title>
                        </heading>
                        <p>
                            <text>Paragraph 1</text>
                        </p>
                        <p>
                            <text>Paragraph 2</text>
                        </p>
                        <p>
                            <text>Paragraph 3</text>
                        </p>

                    </pgrp>
                    <pgrp>
                        <heading>
                            <title>(e) The case</title>
                        </heading>
                        <p>
                            <text>Paragraph 1</text>
                        </p>
                        <p>
                            <text>Paragraph 2
                            </text>
                        </p>
                        <p>
                            <text>Paragraph 3</text>
                        </p>

                    </pgrp>
                </pgrp>
                <pgrp>
                    <heading>
                        <title>
                            <emph typestyle="bf">3. Principles</emph>
                        </title>
                    </heading>
                    <p>
                        <text>Paragraph 1</text>
                    </p>
                    <p>
                        <text>Paragraph 2</text>
                    </p>
                    <p>
                        <text>Paragraph 3</text>
                    </p>
                    <p>
                        <text>Paragraph 4</text>
                    </p>

                </pgrp>
                <pgrp>
                    <heading>
                        <title>
                            <emph typestyle="bf">4. Guidelines </emph>
                        </title>
                    </heading>
                    <p>
                        <text>Paragraph 1</text>
                    </p>
                    <p>
                        <text>Paragraph 2</text>
                    </p>
                    <p>
                        <l>
                            <li>
                                <lilabel>(i)</lilabel>
                                <p>
                                    <text>Paragraph 2.1</text>
                                </p>
                            </li>

                        </l>
                    </p>
                    <p>
                        <text>Pragraph 3</text>
                    </p>
                </pgrp>
                <pgrp>
                    <heading>
                        <title>
                            <emph typestyle="bf">5. Conclusion</emph>
                        </title>
                    </heading>
                    <p>
                        <text>Paragraph 1</text>
                    </p>
                </pgrp>
            </bodytext>


        </level>
    </jrnl:bodytext>

Теперь я хочу получить все, заголовок и текстовые данные. Хотя я могу получить все внешние данные, но я не могу получить их дочерние данные.

Вот код XSL

<xsl:for-each select="//jrnl:bodytext/level/bodytext/pgrp">
      <xsl:text>$T$=</xsl:text>
          <xsl:value-of select="heading/title/emph"/>
          <xsl:text>
</xsl:text>
          <xsl:for-each select="p">
            <xsl:text>$T</xsl:text>
            <xsl:value-of select="text"/>
              <xsl:text>
</xsl:text>
          </xsl:for-each>
          <xsl:text>
</xsl:text>
      </xsl:for-each>

Чтобы расширить этот вопрос, я попробовал тот же код, что и предлагалось, но ничего не произошло.

Пожалуйста, смотрите ниже, что я пробовал.

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:jrnl="http://www.abc.com/glp/jrnl" >

<xsl:template match="//jrnl:bodytext">
    <xsl:for-each select="level/bodytext">
        <xsl:for-each select="pgrp">
            <xsl:text>$T$=</xsl:text>
            <xsl:value-of select="heading/title/emph"/>
            <xsl:text>
</xsl:text>
            <xsl:for-each select="p">
                <xsl:text>$T</xsl:text>
                <xsl:value-of select="text"/>
                <xsl:text>
</xsl:text> </xsl:for-each>
        </xsl:for-each>
        <xsl:text>
</xsl:text>
    </xsl:for-each>
</xsl:template> 
</xsl:stylesheet>

и какой вывод я получил

$T$=1. Orange
    $TParagraph 1
    $TParagraph 2
    $TParagraph 3
$T$=2. Apple 
$T$=3. Principles
    $TParagraph 1
    $TParagraph 2
    $TParagraph 3
    $TParagraph 4
$T$=4. Guidelines 
    $TParagraph 1
    $TParagraph 2
    $T
    $TPragraph 3
$T$=5. Conclusion
    $TParagraph 1

В этом случае текстовое поле для pgrp 2 (Apple) должно быть больше единицы, тогда как в выводе я получил только 1 запись, т.е. $ T $ = 2. Яблоко

1 Ответ

0 голосов
/ 09 марта 2012

Рассмотрим следующий входной фрагмент

<pgrp>
    <heading>
        <title>
            <emph typestyle="bf">2. Apple </emph>
        </title>
    </heading>
    <pgrp>

Здесь мы можем видеть, что существует внутри a.Следовательно, селектор в

<xsl:for-each select="//jrnl:bodytext/level/bodytext/pgrp">

не работает.Чтобы это работало, вам нужно выбрать pgrp в отдельном теге for-each под текущим тегом

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