为什么xmlLinq属性会终止XSL转换?
我有一个XSLT,它迭代这个XML并从“InterestingData”节点选择元素 转换失败,因为“DontNeed2”节点中有此属性:为什么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=
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文档也会成功加载。(我检查了内容。)