Xalan XPathAPI траверс вопрос - PullRequest
0 голосов
/ 10 марта 2011

Я пытаюсь проанализировать файл xhtml, используя xalan XPathAPI.Я застрял в следующем требовании.Вот фрагмент из xhtml

<table border="0" cellspacing="0" cellpadding="0" class="cmnt_message">
            <tr>
              <td width="33" align="right">
                <span class="cmnt_baloon"><!-- Image --></span>
              </td>
              <td width="767" class="red pad_l_10">
                Posted by Macha on Mar 06, 2011 at 01:02 PM
              </td>

            </tr>
            <tr>
              <td colspan="2" class="cmnt_text">
                @rmaytee<br />
                <br />
                #2<br />
                <br />
                In 2011 it is possible to switch to old mat/map browser<br />

                <br />
                Just look around<br />
                <br />
                <a target="_blank" href=
                "http://area.autodesk.com/forum/autodesk-3ds-max/autodesk-3ds-max--3ds-max-design-2011/material-editor/">area.autodesk.com/forum/autodesk-3ds-max/autodesk-3ds-max--3ds-max-design-2011/material-editor/</a><br />

                <br />
                <br />
                <br />

              </td>
            </tr>
          </table>
          <table border="0" cellspacing="0" cellpadding="0" class="cmnt_message">
            <tr>
              <td width="33" align="right">
                <span class="cmnt_baloon"><!-- Image --></span>
              </td>
              <td width="767" class="red pad_l_10">

                Posted by rmaytee on Mar 02, 2011 at 06:04 PM
              </td>
            </tr>
            <tr>
              <td colspan="2" class="cmnt_text">
                2 things:<br />
                <br />
                1- Please bring back "use object center as start snap point" in the snap settings. We have voiced our opinion about this, now please show us you care. <a target="_blank" href=
                "http://www.the-area.com/forum/autodesk-3ds-max/autodesk-3ds-max--3ds-max-design-2011/use-object-center-as-start-snap-point">www.the-area.com/forum/autodesk-3ds-max/autodesk-3ds-max--3ds-max-design-2011/use-object-center-as-start-snap-point</a><br />

                <br />
                2- Make the Material/Map Browser the way it used to be. It is SO SLOW. At least make an option to switch to a "classic Material/Map Browser" or something.
              </td>
            </tr>
          </table>

Здесь я столкнулся с несколькими проблемами.

  1. Я пытаюсь извлечь значения из класса cmnt_message.Одним из них является текст «Опубликовано ...» в первом блоке и текстовое содержимое в cmnt_text.Вот xpath для первого, отправленного частью

/ html: html / html: body // html: div [@ class = 'content_d'] / html: table [@ class = 'cmnt_message'] / html: tr [1] / html: td [2] / text ()

Это возвращает мне «Автор: Мача 06 марта 2011 г. в 13:02», и это то, что я хочу.Но когда я пытаюсь получить cmnt_text со следующим выражением xpath

/ html: html / html: body // html: div [@ class = 'content_d'] / html: table [@ class ='cmnt_message'] / html: tr [2] / html: td / text ()

Я получаю "@rmaytee", т.е. значение до первого,Я пытаюсь получить весь текст внутри cmnt_text.

  1. Другая проблема заключается в том, что мне нужно перебрать cmnt_message и создать коллекцию объекта Message, состоящую из отправленных и комментариев.Не уверен, как выполнять итерации с помощью Xpath.

    SAX2DOM sax2dom = new SAX2DOM ();p.setContentHandler (sax2dom);p.parse (новый InputSource (urlXML.openStream ()));Node doc = sax2dom.getDOM ();XObject comment = XPathAPI.eval (doc, commentPath);

Но это возвращает мне только первое вхождение класса cmnt_message.

Любой указатель будет высоко оценен.

  • Спасибо

Ответы [ 2 ]

1 голос
/ 10 марта 2011

То, что вы хотите, называется строковое значение .

Если в результате ваш тип процессора XPath поддерживает строковый тип данных, вы можете использовать:

string(
    /html:html
       /html:body
          //html:div[@class='content_d']
             /html:table[@class='cmnt_message']
                /html:tr[1]
                   /html:td[2]
)

или выбратьtd элемент и используйте правильный метод DOM.

Не рекомендуется использовать текстовые узлы для смешанной модели содержимого, такой как XHTML.

1 голос
/ 10 марта 2011

Вы должны либо использовать XSL, либо итерировать дочерние узлы /html:html/html:body//html:div[@class='content_d']/html:table[@class='cmnt_message']/html:tr[2]/html:td самостоятельно.

...