XSL с использованием документа результата выводит двойные кавычки и лишние пробелы - PullRequest
1 голос
/ 04 августа 2020

Я пытаюсь вывести текстовый файл с разделителями табуляции из файла XML с помощью документа результата. Но вывод продолжает включать лишние пробелы и двойные кавычки в конце каждой строки.

<?xml version="1.0" encoding="UTF-8"?>
<feed>
    <entry>
        <properties>
            <something>HELLO</something>
            <Id>1234</Id>
            <Email>bob@bobco.com</Email>
        </properties>
    </entry>
    <entry>
        <properties>
            <something>GOODBYE</something>
            <Id>4567</Id>
            <Email>carol@bobco.com</Email>
        </properties>
    </entry>
    <entry>
        <properties>
            <something>HELLO</something>
            <Id>8910</Id>
            <Email>alice@bobco.com</Email>
        </properties>
    </entry>
</feed>

XSLT:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    version="2.0">
    <xsl:output method="text" version="1.0" encoding="UTF-8" indent="no" standalone="yes"/>
    
    <xsl:template match="feed">
        <xsl:result-document href="foo.txt" method="text" standalone="yes" indent="no">    
            <xsl:apply-templates select="entry/properties" />
        </xsl:result-document>
    </xsl:template>
    
    <xsl:template match="properties" >
        <xsl:apply-templates select="Id"/>
        <xsl:text>&#x9;</xsl:text> 
        <xsl:apply-templates select="Email" />"
    </xsl:template>
    
    <xsl:template match="Id" >
        <xsl:value-of select="normalize-space(.)"/>        
    </xsl:template>
    
    <xsl:template match="Email" >
        <xsl:value-of select="normalize-space(.)"/>        
    </xsl:template>
    
    <xsl:template match="text()|@*"/>
</xsl:stylesheet>

Вывод: (есть пробелы в начале 2-я и 3-я строки. Вкладка выходит нормально. Если для отступа установлено значение «нет», почему здесь пробелы и как мне избавиться от этих двойных кавычек в конце?

1234    bob@bobco.com"
    4567    carol@bobco.com"
    8910    alice@bobco.com"
    

1 Ответ

2 голосов
/ 04 августа 2020

Удалите случайный символ " в шаблоне match="properties":

    <xsl:apply-templates select="Email" />"
                                          ^

Он не только распространяется при совпадении с properties, но также приводит к тому, что следующий пробел становится значимым и также выводится .

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