Как получить доступ к элементу в этом входе, используя XPATH - PullRequest
0 голосов
/ 29 ноября 2011

Я использую XPath для доступа к текстовому значению, как показано во входных данных xml.

     <stream>
    <Services>
    <ServicesSub>
        <title>Parameter Calculations</title>
        <list1 type="unordered-bullet">
            <item>
                <premier>
                    <link Id="1222">Sheet Size</link>
                    <link Id="433">Hydraulic System</link>
                </premier>
            </item>
            <item>
                <premier> Review 
<link Id="342332">Diagnose</link>

Rational Approach</premier>
            </item>
            <item>
                <premier>
                    <link Id="222">Process</link>
                </premier>
            </item>
        </list1>
    </ServicesSub>
    <ServicesSub>
        <title>Parameter Set</title>
        <table TableNumber="tab1" titlesource="no-title" frame="all" pgwide="page-wide">
            <tgroup cols="5" colsep="1" rowsep="1" align="left" charoff="50" char="">
                <colspec ColumnName="col1" colwidth="2.77in"/>
                <colspec ColumnName="col2" colwidth="1.10in"/>

                  <thead valign="bottom">
                    <row RowNumber="row1">
                        <entry ColumnName="col1" morerows="0" rotate="0" valign="bottom" align="center">
                            <ptxt>Price less</ptxt>
                        </entry>
                        <entry ColumnName="col2" morerows="0" rotate="0" valign="bottom" align="center">
                            <ptxt>Price more</ptxt>
                        </entry>
                        <entry ColumnName="col3" morerows="0" rotate="0" valign="bottom" align="center">
                            <ptxt>Open Price</ptxt>
                        </entry>
                    </row>
                </thead>
                <tbody valign="top">
                    <row RowNumber="row1">
                        <entry ColumnName="col1" morerows="0" rotate="0" valign="middle">
                            <ptxt>Sheet</ptxt>
                        </entry>
                        <entry ColumnName="col2" morerows="0" rotate="0" valign="middle" align="center">
                            <ptxt>Sheets1</ptxt>
                        </entry>
                    </row>
                    <row RowNumber="row2">
                        <entry ColumnName="col1" morerows="0" rotate="0" valign="middle">
                            <ptxt>Electric failure</ptxt>
                        </entry>
                        <entry ColumnName="col2" morerows="0" rotate="0" valign="middle" align="center">
                            <ptxt>Elec fails</ptxt>
                        </entry>
                    </row>
                </tbody>
            </tgroup>
        </table>
    </ServicesSub>
</Services>
</stream>

Меня интересуют только значения «цена меньше», «цена больше», «цена открытия» под заголовком «Набор параметров» и под thead -> row -> entry.

Я только начал изучать xpath и xslt .. пожалуйста, помогите мне в получении этих значений ..

ожидаемый результат:

<Value = "Price less"\>
<Value = "Price more"\>
<Value = "Open Price"\>

Я пытался до этого ...

/stream/Services/ServicesSub/title[text() = "Parameter Set" ]/following::*

Спасибо Рамм

1 Ответ

2 голосов
/ 29 ноября 2011

Попробуйте этот XPath, который должен вернуть все соответствующие элементы ptxt .

stream/Services/ServicesSub
   [title[text() = 'Parameter Set']]/table/tgroup/thead/row/entry/ptxt

Например, с учетом следующего XSLT

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
   <xsl:output method="xml" indent="yes"/>

   <xsl:template match="/">
         <xsl:apply-templates select="stream/Services/ServicesSub[title[text() = 'Parameter Set']]/table/tgroup/thead/row/entry/ptxt"/>
   </xsl:template>

   <xsl:template match="ptxt">
      <value>
         <xsl:value-of select="." />
      </value>
   </xsl:template>
</xsl:stylesheet>

При применении к вашему входному XML выдает следующий вывод

<value>Price less</value>
<value>Price more</value>
<value>Open Price</value>

Обратите внимание, что вы не упомянули о том, есть ли у вас повторяющиеся значения, и как их следует обрабатывать. Вам нужно прочитать о группировке (Muenchian Grouping в XSLT 1.0), если у вас есть дубликаты и вы хотите, чтобы они игнорировались.

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