【问题标题】:XSLT output empty Debugging fails with no outputXSLT 输出为空 调试失败且无输出
【发布时间】:2018-08-31 02:36:19
【问题描述】:

我阅读了论坛,但无法理解为什么输出为空。这可能是我缺少的一件简单的事情。

我尝试在 VS 2017 中进行调试,但它没有提供任何输出,对此问题的任何帮助表示赞赏。如果我只输入 ns0:EFACT_D96A_ORDERS_EAN008 节点作为 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 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>

【问题讨论】:

    标签: xslt xslt-2.0 xslt-grouping


    【解决方案1】:

    表达式开头的正斜杠/ 与文档节点匹配,因此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>
    

    【讨论】:

    • 您好,感谢您的帮助。我已经尝试过了,但是在“文本”所在的地方,我有一个巨大的变换,而且输入文件比论坛中给出的文件大,ns0:EFACT_D96A_ORDERS_EAN008 有多个子节点。我只得到大约 1500 多条变换线作为 XML 转换的输出,但是当我仅将节点 ns0:EFACT_D96A_ORDERS_EAN008 及其子节点输入到转换中时,我得到 5000+ 行,这是正确的输出。你能帮我理解还有什么问题吗
    • 我可以看到 XSLT 中有一个引用为 。我认为这就是问题所在。我试图了解 ../s0 的作用
    • ..代表父节点,所以../s0.PRILoop1获取当前元素的所有兄弟节点。
    • 理想情况下,您应该创建一个 minimal, verifiable, complete example 来演示该问题。通常,创建一个练习可能会帮助您自己识别问题。从一个基本的 XSLT 开始,然后添加一些位,直到遇到问题,
    猜你喜欢
    • 2016-03-16
    • 1970-01-01
    • 2018-06-16
    • 2012-05-26
    • 1970-01-01
    • 2012-11-07
    • 1970-01-01
    • 2011-05-24
    • 1970-01-01
    相关资源
    最近更新 更多