我使用FOR XML EXPLICIT工会将一些SQL表信息到一个XML文件中。 这是所有的工作,但我的成绩空标签的负荷,在各种不同层次的。 我想删除所有的空标签,但保持各组的最高级别。 下面是诸如此类的事情,我的意思是一个例子:
使用XML废话的这个例子位,我可以删除底层用.modify的XQuery空节点:
DECLARE @XML XML =
'<Whatever>
<GlassesTypes>
<GlassesType />
</GlassesTypes>
<ExpressionOfJoy>
<FellOver>Y</FellOver>
</ExpressionOfJoy>
<Flights>
<Flight>
<Bookings>
<Booking>
<Segments>
<Segment />
</Segments>
</Booking>
</Bookings>
</Flight>
</Flights>
</Whatever>'
SELECT @XML as Before
SET @Xml.modify('delete //*[not(node())]');
SELECT @XML AS After
这已经做了什么我想“GlassesTypes”,但仍有空节点的水平,“机票”。 我可以重复同样的一遍又一遍,每个级别的起床只有“机票”显示点修改命令,但是这样做会删除“GlassesTypes”空的占位符:
DECLARE @XML XML =
'<Whatever>
<GlassesTypes>
<GlassesType />
</GlassesTypes>
<ExpressionOfJoy>
<FellOver>Y</FellOver>
</ExpressionOfJoy>
<Flights>
<Flight>
<Bookings>
<Booking>
<Segments>
<Segment />
</Segments>
</Booking>
</Bookings>
</Flight>
</Flights>
</Whatever>'
SELECT @XML as Before
SET @Xml.modify('delete //*[not(node())]');
SET @Xml.modify('delete //*[not(node())]');
SET @Xml.modify('delete //*[not(node())]');
SET @Xml.modify('delete //*[not(node())]');
SET @Xml.modify('delete //*[not(node())]');
SELECT @XML AS After
有没有什么办法中,我可以删除所有空节点,直到倒数第二个空节点,无论一组多少级包含? 理想的结果是这样的:
<Whatever>
<GlassesTypes />
<ExpressionOfJoy>
<FellOver>Y</FellOver>
</ExpressionOfJoy>
<Flights />
</Whatever>
在这个例子中,只有“不管”的标签,但在真实的数据,可能会有几个反复,所有不同层次的信息,由根标签或同等包围。
任何帮助非常感谢!
谢谢,马克