转换XML格式
我有一个字符串格式如下的XML:转换XML格式,xml,xslt,Xml,Xslt,我有一个字符串格式如下的XML: <?xml version="1.0" encoding="utf-8" ?> - <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> - <
<?xml version="1.0" encoding="utf-8" ?>
- <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
- <soap:Body>
- <GetUserLinksResponse xmlns="http://microsoft.com/webservices/SharePointPortalServer/UserProfileService">
- <GetUserLinksResult>
- <QuickLinkData>
<Name>System 1</Name>
<Group>General</Group>
<Privacy>Private</Privacy>
<Url>https://url1.com</Url>
<ID>6500</ID>
</QuickLinkData>
- <QuickLinkData>
<Name>System 2</Name>
<Group>General</Group>
<Privacy>Private</Privacy>
<Url>https://url2.com</Url>
<ID>6499</ID>
</QuickLinkData>
- <QuickLinkData>
<Name>System 3</Name>
<Group>Work</Group>
<Privacy>Private</Privacy>
<Url>http://url3.com</Url>
<ID>6845</ID>
</QuickLinkData>
</GetUserLinksResult>
</GetUserLinksResponse>
</soap:Body>
</soap:Envelope>
-
-
-
-
-
系统1
一般的
私有的
https://url1.com
6500
-
系统2
一般的
私有的
https://url2.com
6499
-
系统3
工作
私有的
http://url3.com
6845
我希望使用xslt或c#以如下格式显示:
一般的
6500
系统1
https://url1.com
6499
系统2
https://url2.com
工作
6845
系统3
https://url3.com
可能有多个组
如何在c#(使用xslt或任何其他过程)中实现这一点
请帮助…您应该使用:
首先,我将准备一组集合或更好的新类:Group和Item
在第二阶段,解析源文件,用数据填充集合
最后,从这些类集合使用linq到xml生成所需的文件结构
祝你好运 这个简短而简单的转换:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:x="http://microsoft.com/webservices/SharePointPortalServer/UserProfileService"
exclude-result-prefixes="x">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:key name="kGroupByVal" match="x:Group" use="."/>
<xsl:template match=
"x:Group[generate-id() = generate-id(key('kGroupByVal',.)[1])]">
<Group>
<Value><xsl:value-of select="."/></Value>
<xsl:apply-templates select="key('kGroupByVal',.)/.." mode="inGroup"/>
</Group>
</xsl:template>
<xsl:template match="x:QuickLinkData" mode="inGroup">
<Item>
<ID><xsl:value-of select="x:ID"/></ID>
<Name><xsl:value-of select="x:Name"/></Name>
<Url><xsl:value-of select="x:Url"/></Url>
</Item>
</xsl:template>
<xsl:template match="text()"/>
</xsl:stylesheet>
<soap:Envelope
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<GetUserLinksResponse
xmlns="http://microsoft.com/webservices/SharePointPortalServer/UserProfileService">
<GetUserLinksResult>
<QuickLinkData>
<Name>System 1</Name>
<Group>General</Group>
<Privacy>Private</Privacy>
<Url>https://url1.com</Url>
<ID>6500</ID>
</QuickLinkData>
<QuickLinkData>
<Name>System 2</Name>
<Group>General</Group>
<Privacy>Private</Privacy>
<Url>https://url2.com</Url>
<ID>6499</ID>
</QuickLinkData>
<QuickLinkData>
<Name>System 3</Name>
<Group>Work</Group>
<Privacy>Private</Privacy>
<Url>http://url3.com</Url>
<ID>6845</ID>
</QuickLinkData>
</GetUserLinksResult>
</GetUserLinksResponse>
</soap:Body>
</soap:Envelope>
<Group>
<Value>General</Value>
<Item>
<ID>6500</ID>
<Name>System 1</Name>
<Url>https://url1.com</Url>
</Item>
<Item>
<ID>6499</ID>
<Name>System 2</Name>
<Url>https://url2.com</Url>
</Item>
</Group>
<Group>
<Value>Work</Value>
<Item>
<ID>6845</ID>
<Name>System 3</Name>
<Url>http://url3.com</Url>
</Item>
</Group>
应用于提供的XML文档时:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:x="http://microsoft.com/webservices/SharePointPortalServer/UserProfileService"
exclude-result-prefixes="x">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:key name="kGroupByVal" match="x:Group" use="."/>
<xsl:template match=
"x:Group[generate-id() = generate-id(key('kGroupByVal',.)[1])]">
<Group>
<Value><xsl:value-of select="."/></Value>
<xsl:apply-templates select="key('kGroupByVal',.)/.." mode="inGroup"/>
</Group>
</xsl:template>
<xsl:template match="x:QuickLinkData" mode="inGroup">
<Item>
<ID><xsl:value-of select="x:ID"/></ID>
<Name><xsl:value-of select="x:Name"/></Name>
<Url><xsl:value-of select="x:Url"/></Url>
</Item>
</xsl:template>
<xsl:template match="text()"/>
</xsl:stylesheet>
<soap:Envelope
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<GetUserLinksResponse
xmlns="http://microsoft.com/webservices/SharePointPortalServer/UserProfileService">
<GetUserLinksResult>
<QuickLinkData>
<Name>System 1</Name>
<Group>General</Group>
<Privacy>Private</Privacy>
<Url>https://url1.com</Url>
<ID>6500</ID>
</QuickLinkData>
<QuickLinkData>
<Name>System 2</Name>
<Group>General</Group>
<Privacy>Private</Privacy>
<Url>https://url2.com</Url>
<ID>6499</ID>
</QuickLinkData>
<QuickLinkData>
<Name>System 3</Name>
<Group>Work</Group>
<Privacy>Private</Privacy>
<Url>http://url3.com</Url>
<ID>6845</ID>
</QuickLinkData>
</GetUserLinksResult>
</GetUserLinksResponse>
</soap:Body>
</soap:Envelope>
<Group>
<Value>General</Value>
<Item>
<ID>6500</ID>
<Name>System 1</Name>
<Url>https://url1.com</Url>
</Item>
<Item>
<ID>6499</ID>
<Name>System 2</Name>
<Url>https://url2.com</Url>
</Item>
</Group>
<Group>
<Value>Work</Value>
<Item>
<ID>6845</ID>
<Name>System 3</Name>
<Url>http://url3.com</Url>
</Item>
</Group>
系统1
一般的
私有的
https://url1.com
6500
系统2
一般的
私有的
https://url2.com
6499
系统3
工作
私有的
http://url3.com
6845
生成所需的正确结果:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:x="http://microsoft.com/webservices/SharePointPortalServer/UserProfileService"
exclude-result-prefixes="x">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:key name="kGroupByVal" match="x:Group" use="."/>
<xsl:template match=
"x:Group[generate-id() = generate-id(key('kGroupByVal',.)[1])]">
<Group>
<Value><xsl:value-of select="."/></Value>
<xsl:apply-templates select="key('kGroupByVal',.)/.." mode="inGroup"/>
</Group>
</xsl:template>
<xsl:template match="x:QuickLinkData" mode="inGroup">
<Item>
<ID><xsl:value-of select="x:ID"/></ID>
<Name><xsl:value-of select="x:Name"/></Name>
<Url><xsl:value-of select="x:Url"/></Url>
</Item>
</xsl:template>
<xsl:template match="text()"/>
</xsl:stylesheet>
<soap:Envelope
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<GetUserLinksResponse
xmlns="http://microsoft.com/webservices/SharePointPortalServer/UserProfileService">
<GetUserLinksResult>
<QuickLinkData>
<Name>System 1</Name>
<Group>General</Group>
<Privacy>Private</Privacy>
<Url>https://url1.com</Url>
<ID>6500</ID>
</QuickLinkData>
<QuickLinkData>
<Name>System 2</Name>
<Group>General</Group>
<Privacy>Private</Privacy>
<Url>https://url2.com</Url>
<ID>6499</ID>
</QuickLinkData>
<QuickLinkData>
<Name>System 3</Name>
<Group>Work</Group>
<Privacy>Private</Privacy>
<Url>http://url3.com</Url>
<ID>6845</ID>
</QuickLinkData>
</GetUserLinksResult>
</GetUserLinksResponse>
</soap:Body>
</soap:Envelope>
<Group>
<Value>General</Value>
<Item>
<ID>6500</ID>
<Name>System 1</Name>
<Url>https://url1.com</Url>
</Item>
<Item>
<ID>6499</ID>
<Name>System 2</Name>
<Url>https://url2.com</Url>
</Item>
</Group>
<Group>
<Value>Work</Value>
<Item>
<ID>6845</ID>
<Name>System 3</Name>
<Url>http://url3.com</Url>
</Item>
</Group>
一般的
6500
系统1
https://url1.com
6499
系统2
https://url2.com
工作
6845
系统3
http://url3.com
说明:
正确使用很抱歉延迟回复,感谢您的实施,它运行良好。。。