xslt transform выводит весь XML-файл или ничего из него, вместо того, чтобы преобразовывать его? - PullRequest
0 голосов
/ 26 сентября 2011

Я пытаюсь преобразовать xml-файл с таблицей стилей xsl в html.

это Java

TransformerFactory tFactory = TransformerFactory.newInstance();
            Transformer transformer = tFactory.newTransformer(new StreamSource(classLoader.getResourceAsStream("driving.xsl")));
            StreamResult drivingHtml = new StreamResult(new StringWriter());
            transformer.transform(new StreamSource(classLoader.getResourceAsStream("driving.xml")), drivingHtml);
            System.out.println(drivingHtml.getWriter().toString());

это некоторые из XML:

<?xml version="1.0" encoding="UTF-8"?>
<user xmlns="http://notreal.org/ns1" xmlns:poi="http://notreal2.org/ns2">
    <address type="primary">
        <street>1031 Court St.</street>
        <city>Monhegan, NY</city>
    </address>

    <address type="secondary">
        <street> Elm St.</street>
    </address>

это XSL:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="/">
        <html>
            <head>
            <title>User</title>
            </head>
             <body>
                <p>Detailed Addresses</p>
                <xsl:apply-templates select="/user/address"/>
             </body>
         </html>
    </xsl:template>

     <xsl:template match="address">
        <table>
            <th>Primary</th>
            <th>Secondary</th>
            <tr>
                          <td>
                    <xsl:value-of select="address" />
                           </td>
                 </tr>
            </table>
     </xsl:template>
</xsl:stylesheet>

когдая запускаю это, я получаю html из соответствия корневого шаблона, но ничего из адреса соответствия шаблона.Я пробовал другие варианты шаблонов, и вместо того, чтобы получить хотя бы базовый html, я просто выводил все содержимое XML-файла.

Ответы [ 2 ]

1 голос
/ 26 сентября 2011

Проверьте свое пространство имен или измените свой XML на что-то вроде следующего, чтобы добавить префикс пространства имен:

<?xml version="1.0" encoding="UTF-8"?>
<user xmlns:a="http://notreal.org/ns1" xmlns:poi="http://notreal2.org/ns2">
  <address type="primary">
      <street>1031 Court St.</street>
      <city>Monhegan, NY</city>
  </address>

  <address type="secondary">
      <street> Elm St.</street>
  </address>
</user>
0 голосов
/ 26 сентября 2011

Похоже на проблему с пространством имен. Элемент address в источнике имеет пространство имен http://notreal.org/ns1, но ваш XSLT вообще не ссылается на это пространство имен.

Попробуйте включить xmlns="http://notreal.org/ns1" в свой xslt.

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