为什么xmlLinq属性会终止XSL转换?

为什么xmlLinq属性会终止XSL转换?,xml,xslt,Xml,Xslt,我有一个XSLT,它迭代这个XML并从“InterestingData”节点选择元素 转换失败,因为“DontNeed2”节点中有此属性:xmlns:xmlLinq=“clr namespace:System.Xml.Linq;assembly=System.Xml” 因此,如果我完全删除该属性,转换将成功。但是,我不能控制XML的生成,所以我需要能够处理它。 XSL甚至没有选择的节点中的这个属性如何能够终止转换,我该如何解决这个问题 SomeTech.xml <?xml version=

我有一个XSLT,它迭代这个XML并从“InterestingData”节点选择元素

转换失败,因为“DontNeed2”节点中有此属性:
xmlns:xmlLinq=“clr namespace:System.Xml.Linq;assembly=System.Xml”

因此,如果我完全删除该属性,转换将成功。但是,我不能控制XML的生成,所以我需要能够处理它。 XSL甚至没有选择的节点中的这个属性如何能够终止转换,我该如何解决这个问题

SomeTech.xml

<?xml version="1.0" encoding="UTF-8"?>
<Root xmlns="">
  <DontNeed1>
    <Item name="one" />
    <Item name="two" />
    <Item name="three" />
  </DontNeed1>
  <DontNeed2>
    <transporters:SomeWebServiceTransportActivity xmlns:transporters="clr-namespace:SomeTech.DataFeed.Activities.Transporters;assembly=SomeTech.DataFeed" xmlns:out="clr-namespace:SomeTech.DataFeed;assembly=SomeTech.DataFeed" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:compModel="clr-namespace:SomeTech.DataFeed.ComponentModel;assembly=SomeTech.DataFeed" xmlns:channel="clr-namespace:SomeTech.DataFeed.Engine.Channel;assembly=SomeTech.DataFeed" xmlns:engine="clr-namespace:SomeTech.DataFeed.Engine;assembly=SomeTech.DataFeed" xmlns:kernel="clr-namespace:SomeTech.Kernel.Channel;assembly=SomeTech.Kernel" xmlns="clr-namespace:SomeTech.DataFeed;assembly=SomeTech.DataFeed" xmlns:schema="clr-namespace:System.Xml.Schema;assembly=System.Xml" xmlns:xmlLinq="clr-namespace:System.Xml.Linq;assembly=System.Xml" xmlns:domain="clr-namespace:SomeTech.Common.Domain;assembly=SomeTech.Common" xmlns:s="clr-namespace:System;assembly=mscorlib" x:Key="transportActivity" SearchType="ReportId" RecordsPerFile="100" UseWindowsAuth="false" IsWindowsAuthSpecific="false" TempFileOnErrorAction="DoNothing" TempFileOnErrorRenameString="">
    </transporters:SomeWebServiceTransportActivity>
  </DontNeed2>
  <InterestingData>
    <Items>
      <Item>Apple</Item>
    </Items>
    <Items>
      <Item>Orange</Item>
    </Items>
  </InterestingData>
</Root>

苹果
橙色
SomeTech.xsl

<?xml version="1.0" encoding="iso-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:template match="/">
    <html>
      <body>
        <table border="1">
          <tr bgcolor="#cccccc">
            <th style="text-align:left">Item</th>
          </tr>
          <xsl:for-each select="Root/InterestingData/Items">
            <tr>
              <td>
                <xsl:value-of select="Item"/>
              </td>
            </tr>
          </xsl:for-each>
        </table>
      </body>
    </html>
  </xsl:template>
</xsl:stylesheet>

项目
SomeTech.html

<html>
<head>
    <title>Demo XSLT</title>
    <script>
        function loadXMLDoc(filename) {
            if (window.ActiveXObject) {
                xhttp = new ActiveXObject("Msxml2.XMLHTTP");
            }
            else {
                xhttp = new XMLHttpRequest();
            }
            xhttp.open("GET", filename, false);
            try { xhttp.responseType = "msxml-document" } catch (err) { } // Helping IE11
            xhttp.send("");
            return xhttp.responseXML;
        }


        function displayResult() {
            xml = loadXMLDoc("SomeTech.xml");
            xsl = loadXMLDoc("SomeTech.xsl");

            // code for IE
            if (window.ActiveXObject || xhttp.responseType == "msxml-document") {
                ex = xml.transformNode(xsl);
                document.getElementById("example").innerHTML = ex;
            }
                // code for Chrome, Firefox, Opera, etc.
            else if (document.implementation && document.implementation.createDocument) {
                xsltProcessor = new XSLTProcessor();
                xsltProcessor.importStylesheet(xsl);
                resultDocument = xsltProcessor.transformToFragment(xml, document);
                document.getElementById("example").appendChild(resultDocument);
            }
        }
    </script>
</head>
<body onload="displayResult()">
    <div id="example" />
</body>
</html>

演示XSLT
函数loadXMLDoc(文件名){
if(window.ActiveXObject){
xhttp=新的ActiveXObject(“Msxml2.XMLHTTP”);
}
否则{
xhttp=newXMLHttpRequest();
}
xhttp.open(“GET”,filename,false);
请尝试{xhttp.responseType=“msxml文档”}catch(err){}//IE11
xhttp.send(“”);
返回xhttp.responseXML;
}
函数displayResult(){
xml=loadXMLDoc(“SomeTech.xml”);
xsl=loadXMLDoc(“SomeTech.xsl”);
//IE代码
if(window.ActiveXObject | | xhttp.responseType==“msxml文档”){
ex=xml.transformNode(xsl);
document.getElementById(“示例”).innerHTML=ex;
}
//Chrome、Firefox、Opera等的代码。
else if(document.implementation&&document.implementation.createDocument){
xsltProcessor=新的xsltProcessor();
导入样式表(xsl);
resultDocument=xsltProcessor.transformToFragment(xml,文档);
document.getElementById(“示例”).appendChild(resultDocument);
}
}

这似乎只是IE9中的一个问题/错误。

请发布足够的代码(XML+XSLT)以使我们能够重现问题。添加了重现问题的代码。仅供参考,这是在使用VS 2013、Windows 7、IE 9。我看不出您的XSLT代码有任何问题。您是否尝试过不进行转换而加载XSL文档,以查看问题是否在加载过程中而不是转换本身?JB King:是的,即使转换失败,XSL文档也会成功加载。(我检查了内容。)