2013-07-03 4 views
0

Этот запрос:YQL проекция колонки с использованием XPATH

SELECT * 
FROM html 
WHERE url='http://wwww.example.com' 
AND xpath='//tr[@height="20"]' 

возвращает XML:

<results> 
    <tr height="20"> 
     <td height="20" width="425"> 
      <p>Institution 0</p> 
     </td> 
     <td width="134"> 
      <p>Minneapolis</p> 
     </td> 
     <td width="64"> 
      <p>MN</p> 
     </td> 
    </tr> 
    ... 
</results> 

Вопросы:

  • Есть ли способ использовать XPATH для создания отдельных столбцов?
  • Есть ли способ создания псевдонимов столбцов?

Пример (недействительный синтаксис):

SELECT td[position()=1]/p/. AS name, td[position()=2]/p/. AS city, td[position()=3]/p/. AS region 
FROM ... 

Цель:

<results> 
    <tr height="20"> 
     <name>Institution 0</name> 
     <city>Minneapolis</city> 
     <region>MN</region> 
    </tr> 
    ... 
</results> 

ответ

1

Не с XPath, как вы пытаетесь сделать. Однако можно применить XSL Transformations к документам XML/HTML с YQL. Вот пример:

XSLT

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> 
    <xsl:template match="/"> 
     <rows> 
      <xsl:apply-templates select="descendant::tr" /> 
     </rows> 
    </xsl:template> 
    <xsl:template match="//tr"> 
     <row> 
      <name> 
       <xsl:value-of select="td[1]/p" /> 
      </name> 
      <city> 
       <xsl:value-of select="td[2]/p" /> 
      </city> 
      <region> 
       <xsl:value-of select="td[3]/p" /> 
      </region> 
     </row> 
    </xsl:template> 
</xsl:stylesheet> 

HTML

<html> 
    <body> 
     <table> 
      <tr height="20"> 
       <td height="20" width="425"> 
        <p>Institution 0</p> 
       </td> 
       <td width="134"> 
        <p>Minneapolis</p> 
       </td> 
       <td width="64"> 
        <p>MN</p> 
       </td> 
      </tr> 
      <tr height="20"> 
       <td height="20" width="425"> 
        <p>Institution 1111</p> 
       </td> 
       <td width="134"> 
        <p>Minneapolis 1111</p> 
       </td> 
       <td width="64"> 
        <p>MN 11111</p> 
       </td> 
      </tr> 
     </table> 
    </body> 
</html> 

YQL запрос

select * from xslt where stylesheet="url/to.xsl" and url="url/to.html" 

YQL Результат

<results> 
    <rows> 
     <row> 
      <name>Institution 0</name> 
      <city>Minneapolis</city> 
      <region>MN</region> 
     </row> 
     <row> 
      <name>Institution 1111</name> 
      <city>Minneapolis 1111</city> 
      <region>MN 11111</region> 
     </row> 
    </rows> 
</results> 

»See an example running in the YQL console.

+0

Отличная идея! Хотелось бы, чтобы я видел это в документации. У вас тоже есть верх. – craig

+0

Должен ли я также не добавлять в запрос YQL фильтр 'xpath'? Например, 'AND xpath = '// tr [@ height =" 20 "]''? – craig

+0

Нет параметра 'xpath' для таблицы' xslt'. – salathe

Смежные вопросы