XLT не разбирает данные в саксонской - PullRequest
0 голосов
/ 12 февраля 2020


Коротко о моей цели. Я хочу проанализировать xlm-файл с помощью Saxon и в конце получить текстовый файл с кодом. Примерно так: function1 () {
a + a;}
function2 () {
b + b;}
function3 () {
c + c;}
My Идея состоит в том, чтобы создать такой код, используя шаблонный тег <apply>, чтобы для каждого тега <tr> текстовый файл был заполнен необходимыми методами в тегах <td>. Например, для каждого первого потомка <tr> есть функция1 (). Вот ошибки:

    Warning
      XTDE0540: Ambiguous rule match for /html/body[1]/table[1]
    Matches both
      "document-node()/element(Q{http://www.w3.org/1999/xhtml}html)/element(Q{http://www.w3.org/1999/xhtml}body)/element(Q{http://www.w3.org/1999/xhtml}table)" on line 71 of file:/C:/Users/fleonov/Desktop/test_for_thomas/Var_05_02/transfer_html.xsl
    and "document-node()/element(Q{http://www.w3.org/1999/xhtml}html)/element(Q{http://www.w3.org/1999/xhtml}body)/element(Q{http://www.w3.org/1999/xhtml}table)" on line 21 of file:/C:/Users/fleonov/Desktop/test_for_thomas/Var_05_02/transfer_html.xsl
    <?xml version="1.0" encoding="UTF-8"?>

          Use_Cases
          <br xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" 
xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0"
 xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" 
xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" 
xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" 
xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" 
xmlns:xlink="http://www.w3.org/1999/xlink" 
xmlns:dc="http://purl.org/dc/elements/1.1/" 
xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0" 
xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" 
xmlns:of="urn:oasis:names:tc:opendocument:xmlns:of:1.2" 
xmlns:xs="http://www.w3.org/2001/XMLSchema" 
xmlns:xhtml="http://www.w3.org/1999/xhtml"/><p 
xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" 
xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0"
 xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" 
xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" 
xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" 
xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" 
xmlns:xlink="http://www.w3.org/1999/xlink" 
xmlns:dc="http://purl.org/dc/elements/1.1/" 
xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0" 
xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0"
 xmlns:of="urn:oasis:names:tc:opendocument:xmlns:of:1.2" 
xmlns:xs="http://www.w3.org/2001/XMLSchema" 
xmlns:xhtml="http://www.w3.org/1999/xhtml">function1()<br/>

    {<br/><br/>function1()<br/>

The command line output

Но каждый раз я вижу такую ​​вещь (в разных вариациях). Вот мой xlt и xml код:

<xsl:template  match="/html/body/table" >
<xsl:variable name="main_file" select="concat(lower-case(../h1),'_stimuli')"/>
<xsl:result-document href="{$main_file}.h" method="text">`
{

<xsl:apply-templates select="/html/body/table" />  //I put apply template here because it is not 
                                                      possible to use 
                                                      <template> inside a <result-document>





    </xsl:result-document>
</xsl:template>



<xsl:template  match="/html/body/table" name="code">

    <xsl:apply-templates select="/html/body/table/tr" />   

</xsl:template>

 <xsl:template  match="/html/body/table/tr" >
      <xsl:apply-templates select="child::td[2]" />
      <xsl:apply-templates select="child::td[3]" />
      <xsl:apply-templates select="child::td[4]" />
 </xsl:template>

<xsl:template match="child::td[2]">
    <br></br>
    <p>function1()<br></br>
    {<br></br>   
<xsl:value-of select="." /><br></br>
    }<br></br>
</p>
</xsl:template> 


<xsl:template match="child::td[3]"><br></br>
<p>function2()<br></br>
{<br></br>
<xsl:value-of select="." /><br></br>
}<br></br>
</p>
</xsl:template> 


<xsl:template match="child::td[4]"><br></br>
<p>function3()<br></br>
{<br></br>
    <br></br>
    <xsl:value-of select="." /><br></br>

}<br></br>
</p>
</xsl:template> 
</xsl:stylesheet>


Here is mine html that I parse.

     <body>
      <h1>Use_Cases</h1>
      <table border="1">
         <tr>
            <td>file_name</td>
            <td>function1()</td>
            <td>function2()</td>
            <td>function3()</td>
            <td>function4()</td>
            <td></td>
         </tr>
         <tr>
            <td>test</td>
            <td>a+a;</td>
            <td>b+b;</td>
            <td>c+c;</td>
            <td>d+d;</td>
            <td></td>
         </tr>


      </table>
   </body>
</html>

Заранее спасибо

1 Ответ

1 голос
/ 12 февраля 2020

Если вы знаете, что хотите обработать определенные ячейки таблицы, это должно быть легко:

  <xsl:strip-space elements="*"/>
  <xsl:output method="text"/>

  <xsl:template match="/">
    <xsl:apply-templates select="html/body/table/tr[1]/td[position() > 1 and position() &lt; 6]"/>
  </xsl:template>

  <xsl:template match="td">
      <xsl:param name="pos" select="position()"/>
      <xsl:value-of select="., '{', ../following-sibling::tr[1]/td[$pos + 1], '}'" separator="&#10;"/>
      <xsl:text>&#10;</xsl:text>
  </xsl:template>

https://xsltfiddle.liberty-development.net/bwe3c5/1. Это создает простой текст, я не уверен, почему ваш пример попытался использовать элементы br, которые бы подходили только для вывода HTML.

...