XSLT非常新穎,需要XSLT轉換的幫助,我無法正常工作。我遇到的問題是轉換後的文檔出現空白的CONO和CUNO元素。我的XSLT無法正常工作
我一直在使用http://www.w3schools.com/xsl/xsl_value_of.asp作爲指導,但它似乎並沒有工作。
這裏是原始的XML。
<?xml version="1.0" encoding="utf-8"?>
<GetBasicData xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="CRS610MI">
<CONO xmlns="">1</CONO>
<CUNO xmlns="">123456</CUNO>
</GetBasicData>
這裏是我的XSLT
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"><xsl:output method="xml"/>
<xsl:template match="/">
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" soap:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<soap:Body>
<GetBasicData xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="CRS610MI">
<CONO xmlns="">
<xsl:value-of select="GetBasicData/CONO"/>
</CONO>
<CUNO xmlns="">
<xsl:value-of select="GetBasicData/CUNO"/>
</CUNO>
</GetBasicData>
</soap:Body>
</soap:Envelope>
</xsl:template>
</xsl:stylesheet>
下面是我使用轉型
private static Boolean TransformXML(XPathDocument xPathDocument, String xslPath, out XmlDocument xmlDocument)
{
try
{
using (MemoryStream memoryStream = new MemoryStream())
{
using (StreamWriter streamWriter = new StreamWriter(memoryStream))
{
XmlWriter xmlWriter = XmlWriter.Create(streamWriter);
XsltSettings xsltSettings = new XsltSettings();
xsltSettings.EnableScript = true;
XslCompiledTransform xslCompiledTransform = new XslCompiledTransform();
xslCompiledTransform.Load(xslPath, xsltSettings, null);
xslCompiledTransform.Transform(xPathDocument, xmlWriter);
memoryStream.Position = 0;
StreamReader streamReader = new StreamReader(memoryStream);
XmlReader xmlReader = XmlReader.Create(streamReader);
xmlDocument = new XmlDocument();
xmlDocument.Load(xmlReader);
}
}
}
catch (Exception exception)
{
Debug.WriteLine(exception);
xmlDocument = null;
return false;
}
return true;
}
「GetBasicData」 和 「坤諾」 節點具有不同的命名空間* *(未命名空間前綴) - 你不可能選擇它「GetBasicData/CUNO」XPath。 –
我有什麼選擇?我無法更改XML輸入文檔。所以我需要在轉型中做到這一點。 – Matthew
您需要爲XPath指定正確的前綴(無法記住XSLT中是否有特殊的或者只是常規前綴都可以)或者使用'local-name' hack來忽略名稱空間。在MSDN上檢查我們的[Xml命名空間...和XSLT](http://msdn.microsoft.com/en-us/library/ms950779.aspx)。 –