Я читаю форумы и не могу понять, почему вывод пуст. Это может быть простая вещь, по которой я скучаю.
Я пробовал отладку в VS 2017, и она не дает никакого вывода, любая помощь в этом вопросе приветствуется. Если я в качестве входа в XSLT введу только узел ns0: EFACT_D96A_ORDERS_EAN008, то на выходе будет «тестовое» содержимое
<?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 s0 userCSharp" version="1.0" xmlns:ns1="http://Microsoft.LobServices.Sap/2007/03/Types/Idoc/3/ORDERS05//740" xmlns:ns0="http://Microsoft.LobServices.Sap/2007/03/Idoc/3/ORDERS05//740/Send" xmlns:ns2="http://Microsoft.LobServices.Sap/2007/03/Types/Idoc/Common/" xmlns:s0="http://schemas.microsoft.com/BizTalk/EDI/EDIFACT/2006" xmlns:ns3="http://schemas.microsoft.com/2003/10/Serialization/" xmlns:userCSharp="http://schemas.microsoft.com/BizTalk/2003/userCSharp" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ins0="http://schemas.microsoft.com/BizTalk/EDI/EDIFACT/2006/InterchangeXML"> <xsl:output omit-xml-declaration="yes" method="xml" version="1.0" /> <xsl:template match="/"> <xsl:apply-templates select="/s0:EFACT_D96A_ORDERS_EAN008" /> </xsl:template> <xsl:template match="/s0:EFACT_D96A_ORDERS_EAN008"> <ns0:Send> <ns0:idocData> Test </ns0:idocData> </ns0:Send> </xsl:template> </xsl:stylesheet>
Входной файл-
<ins0:EdifactInterchangeXml DelimiterSetSerializedData="39:-1:-1:43:58:63:-1:46:-1" xmlns:ins0="http://schemas.microsoft.com/BizTalk/EDI/EDIFACT/2006/InterchangeXML"> <ns0:UNA xmlns:ns0="http://schemas.microsoft.com/Edi/EdifactServiceSchema"> <UNA1>58</UNA1> </ns0:UNA> <ns0:UNB xmlns:ns0="http://schemas.microsoft.com/Edi/EdifactServiceSchema"> <UNB1> <UNB1.1>ABCD</UNB1.1> <UNB1.2>5</UNB1.2> </UNB1> </ns0:UNB> <TransactionSetGroup> <TransactionSet DocType="http://schemas.microsoft.com/BizTalk/EDI/EDIFACT/2006#EFACT_D96A_ORDERS_EAN008"> <ns0:EFACT_D96A_ORDERS_EAN008 xmlns:ns0="http://schemas.microsoft.com/BizTalk/EDI/EDIFACT/2006"> </ns0:EFACT_D96A_ORDERS_EAN008> </TransactionSet> </TransactionSetGroup> <ns0:UNZ xmlns:ns0="http://schemas.microsoft.com/Edi/EdifactServiceSchema"> <UNZ1>1</UNZ1> <UNZ2>86</UNZ2> </ns0:UNZ> </ins0:EdifactInterchangeXml>
Косая черта / в начале выражения соответствует узлу документа, поэтому select="/s0:EFACT_D96A_ORDERS_EAN008" выберет s0:EFACT_D96A_ORDERS_EAN008, только если он является дочерним по отношению к узлу документа. т.е. если это корневой элемент, а это не так.
/
select="/s0:EFACT_D96A_ORDERS_EAN008"
s0:EFACT_D96A_ORDERS_EAN008
Чтобы выбрать s0:EFACT_D96A_ORDERS_EAN008 независимо от того, где он находится в документе, сделайте это ...
<xsl:apply-templates select="//s0:EFACT_D96A_ORDERS_EAN008" />
Вам также необходимо удалить одиночную косую черту из выражения совпадения (двойные косые черты в выражении совпадения не нужны, так как совпадение будет работать независимо от того, где находится элемент в документе)
Попробуйте это XSLT
<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 s0 userCSharp" version="1.0" xmlns:ns1="http://Microsoft.LobServices.Sap/2007/03/Types/Idoc/3/ORDERS05//740" xmlns:ns0="http://Microsoft.LobServices.Sap/2007/03/Idoc/3/ORDERS05//740/Send" xmlns:ns2="http://Microsoft.LobServices.Sap/2007/03/Types/Idoc/Common/" xmlns:s0="http://schemas.microsoft.com/BizTalk/EDI/EDIFACT/2006" xmlns:ns3="http://schemas.microsoft.com/2003/10/Serialization/" xmlns:userCSharp="http://schemas.microsoft.com/BizTalk/2003/userCSharp" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ins0="http://schemas.microsoft.com/BizTalk/EDI/EDIFACT/2006/InterchangeXML"> <xsl:output omit-xml-declaration="yes" method="xml" version="1.0" /> <xsl:template match="/"> <xsl:apply-templates select="//s0:EFACT_D96A_ORDERS_EAN008" /> </xsl:template> <xsl:template match="s0:EFACT_D96A_ORDERS_EAN008"> <ns0:Send> <ns0:idocData> Test </ns0:idocData> </ns0:Send> </xsl:template> </xsl:stylesheet>