Нужен XSLT, чтобы использовать param, который содержит динамическое значение, создать XML и проверить XSD - PullRequest
0 голосов
/ 03 марта 2019

У меня есть параметр "abc", который содержит следующий динамический XML:

<?xml version="1.0" encoding="UTF-8" ?>
<hello type="PROCESS"><process urn="hello"><object></object><object></object></process></hello>

Мне нужен XSLT, чтобы использовать свойство "abc" и создать нужный XML.

XSLT, который я пробовал.

<?xml version='1.0' ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:a="http://tempuri.org/">
<xsl:param name="abc"/>
<xsl:template match="/">
    <xsl:value-of select="normalize-space($abc)"  disable-output-escaping="yes" />
</xsl:template>

Я получаю сообщение об ошибке при применении этого XSLT: Тип исключения System.Xml.XmlException: Неожиданное объявление XML.Декларация XML должна быть первым узлом в документе, и перед ней не должно быть символов пробела.

Желаемый xml

<?xml version="1.0" encoding="UTF-8" ?>
<hello type="PROCESS"><process urn="hello"><object></object><object></object></process></hello>

Ответы [ 2 ]

0 голосов
/ 06 марта 2019

Копирование параметра, содержащего динамический XML, по какой-то причине не работало.Поэтому я создал рут, удалил объявление xml и загрузил динамический xml в корень.

Я создал XSD для корневого элемента, и он работал.

<?xml version='1.0' ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >
<xsl:param name="abc"/>
<xsl:template match="/">
<myRoot>
    <xsl:value-of select="substring-after($abc,'>')" disable-output-escaping="yes"/>
</myRoot>
</xsl:template>

Спасибо за всех, кто помог мне решить мою проблему.

0 голосов
/ 04 марта 2019

Вы можете скопировать все дерево документов XML следующим образом:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="/">
       <xsl:copy-of select="." />
    </xsl:template>
</xsl:stylesheet>

xsl: копия документации

...