Как заставить открывать и закрывать теги в xml-преобразовании?

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

Например, я пробовал ...

<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes" encoding="ISO-8859-1"/>
<xsl:template match="/">
<root>
<child>
<!--static values-->
<xsl:element name="ad_version"></xsl:element>
<action_code></action_code>
</child>
</root>
</xsl:template>
</xsl:stylesheet>

Это выводит следующее:

<?xml version="1.0" encoding="iso-8859-1"?>
<root>
  <child>
    <ad_version />
    <action_code />
  </child>
</root>

Мне нужно...

<ad_version></ad_version>
<action_code></action_code>

Мысли?

Спасибо.

Если вы не против наличия тегов комментариев между ними, вы можете обмануть, добавив <xsl:comment /> или <!----> между тегами open и close ... Я надеялся, что то же самое будет работать с <xsl:text />, но без радости ...

JohnLBevan 13.09.2018 19:21

пс. Зачем тебе это нужно? Технически эти две формы идентичны; поэтому в большинстве случаев вам нужен вариант с наименьшим количеством символов / это то, что пытается дать вам ваш XSLT-движок ... Возможно, есть другой способ решить вашу основную проблему (т.е. это может быть проблема XY: xyproblem.info)

JohnLBevan 13.09.2018 19:27

Поставщик, который принимает от меня фид, возражает, когда выводит комбинированный тег элемента. Они говорят, что это недействительно, хотя он проходит все валидаторы, которые я использовал. И движок синтаксического анализа выводит его таким образом, независимо от того, как я его передаю. Я просто попытался создать <xsl: text>, используя следующее, и, похоже, это сработало. Хотя это грязно. <xsl: text disable-output-escaping = "yes"> & lt; ad_version & gt; </ xsl: text> <xsl: text disable-output-escaping = "yes"> & lt; / ad_version & gt; </ xsl: text>

geektampa 13.09.2018 19:31

Сообщите этому поставщику, что он должен следовать стандартам XML. Если вы клиент, у него есть еще больше причин следовать стандартам. Серьезно, я бы поставил проблему, не позволяйте какому-нибудь жокею Excel говорить вам, что такое правильный XML, а что нет ...

William Walseth 13.09.2018 19:34

Нашел хак, который вроде работает; измените свой вывод с xml на html. <xsl:output method="html" ... />; или еще лучше xhtml, чтобы сохранить заголовок XML. См. xsltfiddle.liberty-development.net/jyH9rMR/1

JohnLBevan 13.09.2018 19:37
w3.org/TR/REC-xml/#sec-starttags
William Walseth 13.09.2018 19:37

Спасибо за вашу помощь в этом. Думаю, все это сработает. Использование пустого значения value-of сработало и кажется самым чистым из всех.

geektampa 13.09.2018 20:33

Форматирование XML определенным образом для людей, которые не разбирают XML должным образом, является постоянной проблемой StackOverflow; мы также видим обратную сторону медали в людях, которые настаивают на синтаксическом анализе XML с использованием самодельных синтаксических анализаторов, которые вызовут такие проблемы для любого, кто генерирует XML. Вы бы согнули электрическую вилку, чтобы вставить ее в розетку неправильной формы? Надеюсь, что нет. Это дрянная, плохая инженерия, и вы должны настаивать на соответствии стандартам.

Michael Kay 13.09.2018 22:24
0
8
614
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Официально нет разницы между пустыми (<a></a>) и атомарными (<a />) тегами; поэтому у вашего поставщика есть ошибка, если он не может принять эти данные / действительно, он должен исправить это, поскольку они не соответствуют стандартам.

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

  • Если вы используете Microsoft .Net XslCompiledTransform, вы можете заполнить теги с помощью <xsl:value-of select="''" />; то есть код, который выводит пустой во время выполнения. См. Пример скрипта XSLT

  • Если вы используете Саксонский, вы можете переключить вывод с xml на xhtml, например. <xsl:output method="xhtml". См. Пример скрипта XSLT.

Что касается других движков, дайте нам знать, и мы можем попытаться найти взлом. Для многих изменение вывода на html, вероятно, сработает, но приведет к потере XML-декларации (<?xml version="1.0" encoding="ISO-8859-1"?>), что может вызвать другие проблемы, особенно если вы используете символы за пределами обычного диапазона ASCII.

Я пытался сопротивляться. Я не продвигаюсь с ними. даже отправил им доказательства того, что он действителен и т. д. Я не знаю, что они используют в качестве парсера. Большое тебе спасибо. Я использую .Net. Это сработало с использованием <xsl: value-of select = "''" /> ..

geektampa 13.09.2018 20:32

Другие вопросы по теме