Ссылка на пространство имен XML в задаче таблицы стилей XSL - PullRequest
0 голосов
/ 03 августа 2011

Я пытаюсь извлечь данные из следующего фрагмента XML:

<?xml version= "1.0" ?>
<Stmts xmlns="http://tempuri.org/Statement.xsd" Generation="2011-08-01T12:41:41" >
<StatementDetail AccountStatus="Open" CompanyID="" TransactionCount="182" >
<Transactions>
<Manual.../>
...
</Transactions>
</StatementDetail>
</Stmts>

Обратите внимание, что элемент имеет атрибут xmlns.

Когда я пытаюсь использовать следующий XSL, я не получаю данных.

<?xml version="1.0" encoding="ISO-8859-1"?>
<!-- Edited by XMLSpy® -->
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="/">
  <html>
  <body>
  <h2>CabCharge</h2>
    <table border="1">
      <tr bgcolor="#9acd32">
        <th>Batch</th>
        <th>TransNo</th>
      </tr>
      <xsl:for-each select="Stmt/StatementDetail/Transactions/Manual">
      <tr>
        <td><xsl:value-of select="@Batch"/></td>
        <td><xsl:value-of select="@TransNo"/></td>
      </tr>
      </xsl:for-each>
    </table>
  </body>
  </html>
</xsl:template>
</xsl:stylesheet>

НО! Если я удалю атрибут XMLNS из элемента, я получу данные.

Что мне нужно указать в XSL для распознавания пространства имен ???

Спасибо.

1 Ответ

0 голосов
/ 03 августа 2011

Обязательно объявите пространство имен по умолчанию для документа в таблице стилей, например:

<xsl:stylesheet version="1.0"
    xmlns="http://tempuri.org/Statement.xsd"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

В противном случае процессор XSLT будет считать элементы, на которые есть ссылки в вашей таблице стилей, принадлежащими пространству имен по умолчанию null.

Более того, если вы хотите, чтобы пространство имен исключалось из выходного документа, вам нужно объявить нулевое пространство имен для корневого литерального элемента html, например:

<xsl:template match="/">
    <html xmlns="">
            <!-- your stuff -->
    </html>
</xsl:template>

Также обратите внимание, что:

  • В xsl:for-each вы выбираете неправильный элемент (Stmt вместо Stmts)
  • Атрибуты Batch и TransNo не существуют в вашемввод документов.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...