다음과 같은 간단한 XML을 고려하십시오.
<xml>
<customer name="Max">
<email address="me@you.com" />
</customer>
<customer name="Erik">
<email address="erik@your-mom.com" />
</customer>
<customer name="Brent">
<email address="brentcom" />
</customer>
</xml>
항목 <Customer>
의 address
속성 에을 포함 <email>
하지 않는 시퀀스 목록을 얻고 싶습니다 @
.
그래서 다음과 같은 출력을 원합니다.
<customer name="Brent">
<email address="brentcom" />
</customer>
mcve :
DECLARE @x XML = '<xml>
<customer name="Max"><email address="me@you.com" /></customer>
<customer name="Erik"><email address="erik@your-mom.com" /></customer>
<customer name="Brent"><email address="brentcom" /></customer>
</xml>';
이 쿼리 :
SELECT WithValidEmail = @x.query('/xml/customer/email[contains(@address, "@")]')
, WithInvalidEmail = @x.query('/xml/customer/email[contains(@address, "@")] = False');
보고:
╔═══════════════════════════════════════╦══════════════════╗
║ WithValidEmail ║ WithInvalidEmail ║
╠═══════════════════════════════════════╬══════════════════╣
║ <email address="me@you.com" /> ║ ║
║ <email address="erik@your-mom.com" /> ║ false ║
╚═══════════════════════════════════════╩══════════════════╝
이 쿼리 :
SELECT WithInValidEmail = @x.query('/xml/customer/email')
WHERE @x.exist('/xml/customer/email[contains(@address, "@")]') = 0;
보고:
╔══════════════════╗
║ WithInValidEmail ║
╚══════════════════╝
(no results)
WHERE
전자 메일 주소에 "@"기호가 포함 된 경우 적어도 하나의 시퀀스가 존재하기 때문에 위 쿼리 의 절은 전체 XML 세트를 제거합니다.