我有下面的XML:兩相XSLT轉換將字符串轉換到XML第一
<?xml version="1.0" encoding="utf-8"?>
<string>
<Table>
<Rows>
<Row Id="0">
<Column Name="INS_NAME" XPath="Ins.Name">Jane</Column>
<Column Name="INS_LASTNAME" XPath="Ins.LastName">Smith</Column>
</Row>
<Row Id="1">
<Column Name="INS_NAME" XPath="Ins.Name">Joe</Column>
<Column Name="INS_LASTNAME" XPath="Ins.LastName">Miller</Column>
</Row>
<Row Id="2">
<Column Name="INS_NAME" XPath="Ins.Name">George</Column>
<Column Name="INS_LASTNAME" XPath="Ins.LastName">Ramsey</Column>
</Row>
</Rows>
</Table>
</string>
,我想用單 XSLT把它轉換到這個XML:
<?xml version="1.0" encoding="utf-8"?>
<Customers>
<Customer><Name>Jane</Name><LastName>Smith</LastName></Customer>
<Customer><Name>Joe</Name><LastName>Miller</LastName></Customer>
<Customer><Name>George</Name><LastName>Ramsey</LastName></Customer>
</Customers>
我可以用兩種不同的XSLT來完成:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<xsl:value-of select="/" disable-output-escaping="yes" />
</xsl:template>
</xsl:stylesheet>
然後:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<Customers>
<xsl:for-each select="Table/Rows/Row">
<Customer>
<Name><xsl:value-of select="Column[@Name='INS_NAME']" /></Name>
<LastName><xsl:value-of select="Column[@Name='INS_LASTNAME']" /></LastName>
</Customer>
</xsl:for-each>
</Customers>
</xsl:template>
</xsl:stylesheet>
我一直在閱讀關於多相變換,但我似乎無法得到它。我已經嘗試在變量中保存第一個XSLT,但在保存到變量時似乎disable-output-escaping="yes"
不起作用。
任何人都可以幫忙嗎?
謝謝。
新的信息(編輯)
我現在翻譯的字符串是這樣的:
<xsl:output method="text"/>
<xsl:template match="/">
<xsl:variable name="stringXml">
<?xml version="1.0" encoding="utf-8"?>
<xsl:value-of select="translate(translate(/,'>','>'),'<','<')" />
</xsl:variable>
...
我該怎麼辦存儲在stringXML生成的XML轉換?
最終解決方案(編輯)
<msxml:script implements-prefix="myLib" language="C#">
<msxml:assembly name="System.Web"/>
<msxml:using namespace="System.Web"/>
<![CDATA[
public System.Xml.XPath.XPathNodeIterator convertText(string text)
{
XmlDocument doc = new XmlDocument();
doc.PreserveWhitespace = true;
doc.LoadXml(text);
return doc.CreateNavigator().Select("/");
}
]]>
</msxml:script>
感謝您的確認。你能想到另一種將字符串轉換爲XML的方式嗎? – supercoco 2012-08-10 12:36:25
不在純粹的XSLT(1.0或2.0)中。這可以使用微小的擴展功能來完成。如果你需要這個,我可以在C#中給你一個。 – 2012-08-10 12:43:03
我沒有學習過擴展函數,所以我不知道我是否可以使用它。我現在用XSLT創建一個文本輸出,但我需要將存儲在變量中的結果XML轉換。這可能嗎? (請參閱原始帖子上的編輯) – supercoco 2012-08-10 13:15:08