2017-02-09 8 views
0

У меня есть следующий файл с XMLXSLT отступы теряются при удалении узла

<?xml version="1.0" encoding="UTF-8"?> 
<start> 
    <param_1>   
     <short_name>parameter_a</short_name> 
    </param_1> 
    <param_2>   
     <short_name_2>parameter_b</short_name_2> 
    </param_2> 
</start> 

и у меня есть следующий XSLT файл:

<?xml version="1.0" encoding="UTF-8"?>   
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
     xmlns:xlink="http://www.w3.org/1999/xlink"> 
     <xsl:output method="xml" indent="yes" encoding="utf-8" />  
    <xsl:template match="/" > 
     <gml:description> 
        <xsl:value-of select="document('/path/to/mydoc.xml')/start/param_1/short_name"/> 
    </gml:description> 
    <gml:description> 
      <xsl:for-each select="document('/path/to/mydoc.xml')/start/param_2"> 
       <xsl:variable name="my_xlink" select="short_name_2"/> 
        <xsl:value-of select="$my_offering1_observed_property_xlink"/>  
       <om:observedProperty xlink:href="{$my_offering1_observed_property_xlink}"/> 
       </xsl:for-each> 
    </gml:description> 
</xsl:template> 
</xsl:stylesheet> 

это выход я получаю

<?xml version="1.0" encoding="utf-8"?> 
<gml:description>parameter_a</gml:description> 
<gml:description>parameter_b<om:observedProperty xlink:href="parameter_b"/></gml:description> 

проблема в том, что я хотел бы получить этот результат

<?xml version="1.0" encoding="utf-8"?> 
    <gml:description>parameter_a</gml:description> 
    <om:observedProperty xlink:href="parameter_b"/> 

, но если я удалить <gml:description> из моего узла XSLT файла конечный XML потерял свою отступы:

<?xml version="1.0" encoding="utf-8"?> 
     <gml:description>parameter_a</gml:description><om:observedProperty xlink:href="parameter_b"/> 

могли бы вы сказать мне, что я делаю неправильно?

благодаря

+1

Пожалуйста, ваш полный XSLT, в том числе объявления пространства имен и XSL: настройки вывода. - Обратите внимание, что ожидаемый результат не является хорошо сформированным XML-документом (отсутствует один корневой элемент). В зависимости от вашего процессора это может быть причиной отсутствия отступов. –

+0

Привет майкл, Я только что добавил объявление пространства имен. Я не знаю, является ли это проблемой объявления или процессора, потому что, если я оставлю , он работает. , но я, вероятно, что-то недопонимаю –

+0

Ваш XSLT ошибочен. Например, он содержит два совпадения для '' и пропускает несколько закрывающих тегов. Между этим кодом и [mcve] существует некоторое расстояние. – zx485

ответ

1

Это кажется причуда libxslt процессора. Я успешно воспроизвели проблему, используя эту минимальную таблицу стилей:

<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/> 

<xsl:template match="/"> 
    <description/> 
    <observedProperty/> 
</xsl:template> 

</xsl:stylesheet> 

, которая возвращает:

<?xml version="1.0" encoding="UTF-8"?> 
<description/><observedProperty/> 

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


(*), за исключением, конечно, очевиден:

<xsl:template match="/"> 
    <description/> 
    <xsl:text>&#10;</xsl:text> 
    <observedProperty/> 
</xsl:template> 
+0

На самом деле, глядя на мою проблему, она может столкнуться с другой точкой зрения, потому что в конечном итоге то, что хотелось бы достичь, - это возможность изменить текст «xlink» в с переменной« parameter_b », которую я могу извлечь, используя цикл« для каждого ». Любые идеи? –

+0

@ sylar_80 Я не вижу, как это связано с вашим вопросом, который касался отступов. Если у вас есть проблема с * контентом * вывода (в отличие от * формы *), разместите его в новом вопросе. –

+0

Хорошо, я решил проблему. спасибо за ваши входы !! –

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

  • Нет связанных вопросов^_^