FOR XML EXPLICIT를 사용하여 일부 SQL 테이블 정보를 XML 파일로 변환합니다. 그것은 모두 작동하지만, 결과에 여러 종류의 다양한 레벨의 빈 태그가 있습니다. 모든 빈 태그를 제거하고 싶지만 각 그룹의 최상위 레벨을 유지하십시오. 여기 물건의 종류의 예입니다 내 말은 :SQL Server에서 빈 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
이 행하신 정확히 I 'GlassesTypes'를 원하지만 'Flights'에는 여전히 빈 노드가 있습니다. 어떤 방법이 있나요
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
: 나는 같은은 '행'이 표시되는 시점까지 얻을 각 수준에 대한 반복 명령을 수정 반복 할 수 있지만, 이렇게하면 'GlassesTypes'빈 자리를 삭제합니다 어떤 빈 노드를 두 개까지 삭제할 수 있습니까? 이상적인 결과는 다음과 같다 :이 예에서
<Whatever>
<GlassesTypes />
<ExpressionOfJoy>
<FellOver>Y</FellOver>
</ExpressionOfJoy>
<Flights />
</Whatever>
은 단지 '무엇이든'태그가 있지만, 실제 데이터의 루트 태그에 포함되는 정보의 서로 다른 수준, 모든 반복 여러 가지가있을 수 있습니다 또는 동급.
많은 도움을 주셨습니다.
덕분에, 마크
안녕하세요, 답변을 주셔서 감사합니다. 스크립트의 실제 줄이 어떻게 생겼는지 분명히 할 수 있겠 니? 미안 해요. 전에 xquery를 많이 사용하지 않았습니다. –
@HighPlainsGrifter 그것은'// * [not (node ())] '대신'delete' 다음에 오는 XPath입니다. 이 작업은 한 번만 실행하면됩니다. – wst
Gotcha - 시도해 보니 XQuery 구문 'attribute()'이 지원되지 않는다는 오류가 발생하여 잘못된 결과가 발생했을 것입니다. 그러나, 나는 특히 XML에서 속성을 사용하지 않기 때문에 괜찮습니다. "SET @ XML.modify ('delete/Whatever/* // * [empty (.// text())]')"완벽하게 작동하는 비트를 제거했습니다. 도와 주셔서 감사합니다! –