2012-05-30 2 views
1

Я пишу текстовые выходные файлы, читающие XML-файл с использованием XSL.Удаление генерации выходного файла XSL во время выполнения

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

Но если контент недоступен (не выполняется) < XSL: if > "Условие), то выходной файл будет пустым файлом.

Поэтому я хочу добавить условие else и в этом случае условие, чтобы избежать создания выходного файла XSL во время выполнения.

Любое тело, имеющее ключ?

< xsl: message terminate = "yes" > не поможет, потому что он генерирует результат, но только прекращает дальнейшую обработку XSL.

Может ли любой орган помочь или даже предложить любой другой подход, который необходимо принять в Java-коде, даже не удаляя файлы после их создания. [Читая их и идентифицируя пустые файлы]

В настоящее время я использую java, чтобы читать созданные пустые файлы и удалять их явно. Спасибо в adavance.

+0

Сложно дать конкретную помощь без предоставления кода. – ChadNC

ответ

1

Я приведу два примера, как это может быть сделано - во-вторых, то, что я рекомендую:

Предположим, что у нас есть этот XML-документ:

<nums> 
    <num>01</num> 
    <num>02</num> 
    <num>03</num> 
    <num>04</num> 
    <num>05</num> 
    <num>06</num> 
    <num>07</num> 
    <num>08</num> 
    <num>09</num> 
    <num>10</num> 
</nums> 

и мы хотим вывести еще один из них, в котором элементы num с четными числами «удаляются».

Один из способов сделать это:

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output omit-xml-declaration="yes" indent="yes"/> 
<xsl:strip-space elements="*"/> 

<xsl:template match="/*"> 
    <nums> 
     <xsl:apply-templates/> 
    </nums> 
</xsl:template> 

<xsl:template match="num"> 
    <xsl:choose> 
    <xsl:when test=". mod 2 = 1"> 
    <num><xsl:value-of select="."/></num> 
    </xsl:when> 
    <!-- <xsl:otherwise/> --> 
    </xsl:choose> 
</xsl:template> 
</xsl:stylesheet> 

разыскиваемого результат получается:

<nums> 
    <num>01</num> 
    <num>03</num> 
    <num>05</num> 
    <num>07</num> 
    <num>09</num> 
</nums> 

ли уведомление: Для "ничего не делать" Вы даже дон Не нужно <xsl:otherwise>, и это закомментировано.

Лучшее решение:

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output omit-xml-declaration="yes" indent="yes"/> 
<xsl:strip-space elements="*"/> 

<xsl:template match="node()|@*"> 
    <xsl:copy> 
     <xsl:apply-templates select="node()|@*"/> 
    </xsl:copy> 
</xsl:template> 

<xsl:template match="num[. mod 2 = 0]"/> 
</xsl:stylesheet> 

Это приводит к тому же правильный результат.

Здесь мы переопределяем правило идентичности шаблоном, соответствующим num элементам с четным значением и с пустым телом - что делает «удалить».

ли уведомление:

Здесь мы не используем никаких «если-то-иначе» явные указания на всех - только XTemplate сопоставления с образцом, который является наиболее отличительной чертой XSLT.

+0

Большое спасибо за ваше время. Sir, Мне нужно, чтобы выходной файл не генерировался во время выполнения внутри части else. У меня есть чувство, что это невозможно сделать внутри XSL, но принесет приятную тему для всех нас, чтобы думать. Даже если мы сможем преодолеть эту проблему в конце java, вам будет очень благодарна помощь. Еще раз спасибо :) – Dilruk

+0

@dilruk: Я ответил на ваш вопрос в максимально возможной степени, учитывая предоставленную информацию. Если вы считаете, что это не решит вашу проблему, отредактируйте вопрос и дайте полный (как можно меньший) реальный пример. Не оставляйте людей, пытающихся догадаться, в чем проблема. –

+0

Мне нужно избегать создания выходного файла во время выполнения. [После проверки состояния] позволяет сказать, что я хочу проверить, существует ли номер 11 в указанном выше XML-файле. И если он не существует, я не хочу иметь выходной файл, потому что мне нужны только файлы, которые имеют номер 11. Потому что после этого я могу предположить, что все генерируемые выходные файлы имеют число 11, поэтому я могу сделать дальнейшая обработка без дальнейшей фильтрации в конце java. – Dilruk

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