首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >删除Server中不同级别的空XML标记

删除Server中不同级别的空XML标记
EN

Stack Overflow用户
提问于 2014-09-02 16:05:09
回答 1查看 1.8K关注 0票数 1

我使用XML显式到union将一些SQL表信息转换为XML文件。这一切都是可行的,但是我在结果中有很多空标签,在不同的层次上。我想删除所有的空标签,但保持每一组的最高水平。下面是一个例子,我的意思是:

使用这个无意义的XML示例,我可以使用.modify xquery删除底层的空节点:

代码语言:javascript
复制
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”空占位符:

代码语言:javascript
复制
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

是否有任何方法可以删除所有空节点,直到倒数第二个空节点,而不管一个组包含多少个级别?理想的结果是:

代码语言:javascript
复制
<Whatever>
  <GlassesTypes />
  <ExpressionOfJoy>
      <FellOver>Y</FellOver>
  </ExpressionOfJoy>
  <Flights />
</Whatever>

在本例中,只有“任何”标记,但在实际数据中,可能会重复几次,所有这些信息都具有不同级别的信息,包含在根标记或等效信息中。

任何帮助都非常感谢!

谢谢,马克

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-09-02 16:28:02

您可以将“空”定义为不包含任何子代属性或文本节点,而不是不包含任何子代节点。然后,仅通过选择其子女的后代来保留<Whatever>的子级:

代码语言:javascript
复制
/Whatever/*//*[empty(.//text() | .//attribute())]
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25627732

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档