2010-09-20 4 views
0

нужна помощь в решении следующей проблемы. Мне нужно преобразовать приведенный ниже вход (XML) в упомянутый вывод (XML).Помощь XSLT при объявлении пространства имен

<Header> 
     <End_Date xsi:nil="true"/> 
    <Header> 

К следующему формату.

<Header> 
     <End_Date xsi:nil="true" xmlns:xsi"http://www.w3.org/2001/XMLSchema"/> 
    <Header> 

Это таблица стилей:

<xsl:stylesheet version="2.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    exclude-result-prefixes="xs"> 

    <xsl:output method="xml" encoding="UTF-8" indent="yes"/> 

    <xsl:template match="/"> 
     <HEADER> 
     <xsl:for-each select="HEADER"> 
      <xsl:sequence select="(./@node(), ./node())"/> 
     </xsl:for-each> 
     </HEADER> 
    </xsl:template> 
</xsl:stylesheet> 

Спасибо заранее. Gabriel

+0

Я не вижу XML вообще (без угловых скобок). Даже если у вас есть '', вы не можете обработать его с помощью XSLT, так как ему нужно правильно сформированное XML-пространство имен для начала и без каких-либо xmlns: xsi = "someURI", этот фрагмент не является пространство имен хорошо сформированное XML. –

+0

Привет, я не могу добавить угловые скобки. У меня был список кода, но я не могу его показать, поскольку у меня недостаточно репутации. – Gabriel

+0

\t \t \t \t

\t \t \t \t \t \t \t \t \t \t \t \t
\t Gabriel

ответ

0

Я прав, думая, что вы хотите воспроизвести почти точную копию входного XML с добавлением объявления пространства имен xsi, которое отсутствует на входе?

Во-первых, как и сейчас, ваш ввод не является корректным XML, только из-за отсутствия объявления пространства имен xsi. Следовательно, нет возможности использовать XSLT для его добавления: любой XSLT-процессор захлестнет неровность ввода.

Во-вторых, вам нужно проверить чувствительность к регистру: в настоящее время никакие входные узлы не соответствуют выражению <xsl:for-each select="HEADER">. Если вы измените его на "Header", правило шаблона действительно заменит вход <Header><HEADER>, содержимое которого копируется одинаково. Но ... только если у вас есть декларации пространства имен во входном праве ...

Итак, если целью является действительно «модернизировать» не-правильно сформированный XML в хорошо сформированную версию, я бы предложил искать другие инструменты, такие как Perl, Awk, или любой другой простой поиск/замену решения, которое работает на обычном тексте и может просто добавить недостающее объявление пространства имен в документе элемент:

<Header xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <End_Date xsi:nil="true"/> 
</Header> 

(конечно, вы также может использовать функцию XSLT 2.0 unparsed-text($href), которая позволяет читать любой файл как непроверенный текст, который затем можно продолжить с помощью <xsl:analyze-string>. См. статью Майкла Кейя Up-conversion using XSLT 2.0 для дальнейшего вдохновения. это довольно неудобный способ обработки не XML с помощью XML-инструмента, я даю это просто для полноты - если добавление префикса пространства имен является единственной проблемой, которую нужно решить, я бы определенно пошел на более дешевый вариант поиска/замены.)

Надеется, что это помогает,

Рон

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