Я полагаю, это связано с вашим вопросом Извлечение XML-документа в узле XML из сообщения WCF-SQL с использованием выражения пути к телу
Первое, что вам, вероятно, нужно сделать, это удалитьлюбой Min Происходит или Макс Происходит от любого из узлов, так что они встречаются только 1. Затем вы можете продвигать свойства, которые вы хотите сохранить в контексте вашего сообщения.
Следующая часть будет извлекать часть msgbody,в вашем предыдущем вопросе ответом было использование XPath для извлечения части тела в адаптере, но тогда вы потеряете эти заголовки до того, как они пройдут через XML disasembler, вместо того, чтобы создавать карту для ее извлечения дляВы вместо этого.
Просто создайте карту, в которой вход и выход настроен на вашу схему, создайте ссылку с msgbody на msgbody.Затем щелкните правой кнопкой мыши карту в обозревателе решений и выберите Проверить карту.Это создаст файл XSLT.Скопируйте этот XSLT-файл в каталог проекта для карты и добавьте его в качестве существующего элемента в проект.Нажмите на сетку вашей карты и задайте пользовательский путь XSLT для вашего XSLT.
Из вашего примера XML-файла в этом вопросе ваш XSLT будет выглядеть как
<?xml version="1.0" encoding="UTF-16"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:var="http://schemas.microsoft.com/BizTalk/2003/var" exclude-result-prefixes="msxsl var" version="1.0">
<xsl:output omit-xml-declaration="yes" method="xml" version="1.0" />
<xsl:template match="/">
<xsl:apply-templates select="/NewTable" />
</xsl:template>
<xsl:template match="/NewTable">
<NewTable>
<msgbody>
<xsl:value-of select="msgbody/text()" />
</msgbody>
</NewTable>
</xsl:template>
</xsl:stylesheet>
Но так как вы хотите толькозначение тела, которое вы хотите отредактировать XSLT, чтобы удалить <NewTable>
, <msbody>
, </msgbody>
& </NewTable>
и любые другие выходные узлы, которые вам не нужны.
И, наконец,если ваш XML экранирован в соответствии с вашим предыдущим вопросом, вы захотите добавить disable-output-escaping="yes"
к выбору, как показано ниже и согласно Как удалить символы XML с помощью XSLT?
<?xml version="1.0" encoding="UTF-16"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:var="http://schemas.microsoft.com/BizTalk/2003/var" exclude-result-prefixes="msxsl var" version="1.0">
<xsl:output omit-xml-declaration="yes" method="xml" version="1.0" />
<xsl:template match="/">
<xsl:apply-templates select="/NewTable" />
</xsl:template>
<xsl:template match="/NewTable">
<xsl:value-of select="msgbody/text()" disable-output-escaping="yes"/>
</xsl:template>
</xsl:stylesheet>
Примечание. При тестировании карты в Visual Studio вам придется отключить проверку выходных данных, поскольку, конечно, она не соответствует схеме.Однако вы можете создать схему для этого XML.