C# 分解XML并显示在SSRS报告中
我有这样的XMLC# 分解XML并显示在SSRS报告中,c#,sql,xml,reporting-services,sql-server-2014,C#,Sql,Xml,Reporting Services,Sql Server 2014,我有这样的XML <OrchestrationConfiguration> <Instrument> <Spectrometer> <Inputs> <Channel-ChannelNumber-1> <ChannelNumber>1</ChannelNumber> <ChannelName>Answer01</ChannelName>
<OrchestrationConfiguration>
<Instrument>
<Spectrometer>
<Inputs>
<Channel-ChannelNumber-1>
<ChannelNumber>1</ChannelNumber>
<ChannelName>Answer01</ChannelName>
</Channel-ChannelNumber-1>
</Inputs>
<Outputs>
<Channel-ChannelNumber-1>
<ChannelNumber>1</ChannelNumber>
<ChannelName>1</ChannelName>
<ChannelName>2</ChannelName>
<ChannelName>3</ChannelName>
<ChannelName>4</ChannelName>
<ChannelName>5</ChannelName>
<ChannelName>6</ChannelName>
<ChannelName>7</ChannelName>
<ChannelName>8</ChannelName>
<ChannelName>9</ChannelName>
<ChannelName>10</ChannelName>
</Channel-ChannelNumber-1>
<Channel-ChannelNumber-2>
<ChannelNumber>2</ChannelNumber>
<ChannelName>Temperature-K</ChannelName>
</Channel-ChannelNumber-2>
<Channel-ChannelNumber-3>
<ChannelNumber>3</ChannelNumber>
<ChannelName>Pressure-inHg-absolute</ChannelName>
</Channel-ChannelNumber-3>
</Outputs>
</Spectrometer>
</OrchestrationConfiguration>
1.
答复01
1.
1.
2.
3.
4.
5.
6.
7.
8.
9
10
2.
温度-K
3.
绝对压力
在我的SSRS报告中。我创建了一个按父名称分组的列表,为了获得输出,我应用了以下过滤器
我面临的问题是获取输入。我无法区分输出和输入,因为过滤器是相同的。还有别的方法吗?如果需要,我很乐意更改XML的格式。
我正在使用XMLTable函数分解xml
可能有用的注释
在注释中,您声明可以更改XML。你真的应该这样做 一些背景:
- XML中节点的顺序是持久化的。只要“位置”与节点顺序中的实际位置相同,就无需说明。尽管如此,逐字说明ChannelNumber仍然是一个好主意,因为它可以简化查询李>
- 要求XML*显示
下面的所有
元素很容易,但要求显示
下面的所有元素需要一些复杂的解决方法,这些元素的名称以
开头李>频道
DECLARE @XML XML=
'<OrchestrationConfiguration>
<Instrument>
<Spectrometer>
<Inputs>
<Channel Number="1">
<ChannelName>Answer01</ChannelName>
</Channel>
</Inputs>
<Outputs>
<Channel Number="1">
<ChannelName>1</ChannelName>
<ChannelName>2</ChannelName>
<ChannelName>3</ChannelName>
<ChannelName>4</ChannelName>
<ChannelName>5</ChannelName>
<ChannelName>6</ChannelName>
<ChannelName>7</ChannelName>
<ChannelName>8</ChannelName>
<ChannelName>9</ChannelName>
<ChannelName>10</ChannelName>
</Channel>
<Channel Number="2">
<ChannelName>Temperature-K</ChannelName>
</Channel>
<Channel Number="3">
<ChannelName>Pressure-inHg-absolute</ChannelName>
</Channel>
</Outputs>
</Spectrometer>
</Instrument>
</OrchestrationConfiguration>';
SELECT InpCh.value('@Number','int') AS InputChannelNumber
,InpCh.value('(ChannelName/text())[1]','nvarchar(max)') AS InputChannelName
,OutCh.value('@Number','int') AS InputChannelNumber
,OutChName.value('(text())[1]','nvarchar(max)') AS InputChannelName
FROM @xml.nodes('/OrchestrationConfiguration/Instrument/Spectrometer/Inputs/Channel') AS A(InpCh)
OUTER APPLY @xml.nodes('/OrchestrationConfiguration/Instrument/Spectrometer/Outputs/Channel') AS B(OutCh)
OUTER APPLY B.OutCh.nodes('ChannelName') AS C(OutChName)
在注释中,您声明可以更改XML。你真的应该这样做 一些背景:
- XML中节点的顺序是持久化的。只要“位置”与节点顺序中的实际位置相同,就无需说明。尽管如此,逐字说明ChannelNumber仍然是一个好主意,因为它可以简化查询李>
- 要求XML*显示
下面的所有
元素很容易,但要求显示
下面的所有元素需要一些复杂的解决方法,这些元素的名称以
开头李>频道
DECLARE @XML XML=
'<OrchestrationConfiguration>
<Instrument>
<Spectrometer>
<Inputs>
<Channel Number="1">
<ChannelName>Answer01</ChannelName>
</Channel>
</Inputs>
<Outputs>
<Channel Number="1">
<ChannelName>1</ChannelName>
<ChannelName>2</ChannelName>
<ChannelName>3</ChannelName>
<ChannelName>4</ChannelName>
<ChannelName>5</ChannelName>
<ChannelName>6</ChannelName>
<ChannelName>7</ChannelName>
<ChannelName>8</ChannelName>
<ChannelName>9</ChannelName>
<ChannelName>10</ChannelName>
</Channel>
<Channel Number="2">
<ChannelName>Temperature-K</ChannelName>
</Channel>
<Channel Number="3">
<ChannelName>Pressure-inHg-absolute</ChannelName>
</Channel>
</Outputs>
</Spectrometer>
</Instrument>
</OrchestrationConfiguration>';
SELECT InpCh.value('@Number','int') AS InputChannelNumber
,InpCh.value('(ChannelName/text())[1]','nvarchar(max)') AS InputChannelName
,OutCh.value('@Number','int') AS InputChannelNumber
,OutChName.value('(text())[1]','nvarchar(max)') AS InputChannelName
FROM @xml.nodes('/OrchestrationConfiguration/Instrument/Spectrometer/Inputs/Channel') AS A(InpCh)
OUTER APPLY @xml.nodes('/OrchestrationConfiguration/Instrument/Spectrometer/Outputs/Channel') AS B(OutCh)
OUTER APPLY B.OutCh.nodes('ChannelName') AS C(OutChName)
这个XML的构造在您的控制之下吗?您应该避免像在
中那样为元素命名编号。而是使用像
这样的属性。否则您将遇到严重的问题……是的,XML可以更改。必须对所有仪表(仪表块)进行更换。哦,谢谢你,什么样的问题?这个XML的构造在你的控制之下吗?您应该避免像在
中那样为元素命名编号。而是使用像
这样的属性。否则您将遇到严重的问题……是的,XML可以更改。必须对所有仪表(仪表块)进行更换。哦,谢谢,什么问题?