정말이지 가끔 까먹어서
한참을 헤매게 되는군요..
예를 들어 다음과 같은 구문이 있다 합시다.
<?xml version="1.0" encoding="utf-8"?>
<Collection MaxLevel="8" TileSize="256" Format="jpg" NextItemId="39" xmlns="http://schemas.microsoft.com/deepzoom/2008">
<Items>
<I Id="0" N="0" Source="http://localhost/000.jpg.xml">
<Size Width="4128" Height="6189" />
<Viewport Width="1" X="0" Y="0" />
</I>
<I Id="1" N="1" Source="http://localhost/001.jpg.xml">
<Size Width="4128" Height="6189" />
<Viewport Width="1" X="0" Y="0" />
</I>
<I Id="2" N="2" Source="http://localhost/002.jpg.xml">
<Size Width="4128" Height="6189" />
<Viewport Width="1" X="0" Y="0" />
</I>
</Items>
</Collection>
여기서 Source 에 해당하는 부분만을 뽑고 싶을때
만일 네임 스페이스가 없는 상태라면
다음과 같이 코드를 작성해 줍니다.
var Source = from I in xml.Elements("Items").Elements("I")
select I.Attribute("Source");
하지만 실제 위의 경우에는 Collection 란에 xmlns 가 "http://schemas.microsoft.com/deepzoom/2008" 로 지정되어 있으므로
실제 프로그램을 돌려보면 Linq 는 에러도 내지 않고
그냥 해당되는 내용이 없는 상태로 출력되게 되지요.
네임스페이스가 있는 xml 을 Linq To Xml 에서 쿼리하는 방법은 간단한데
네임스페이스 변수를 선언하여 할당하고
엘리먼트란에 네임스페이스를 "+" 연산자로 연결시켜주면 되게 되죠.
다음과 같이 말입니다.
XNamespace xns = @"http://schemas.microsoft.com/deepzoom/2008";
var Source = from I in xml.Elements(xns + "Items").Elements(xns + "I")
select I.Attribute("Source");
정말이지 가끔 헷갈리는군요...
(한번 까먹고 코딩하면 한두시간 헤매고요)
결정적으로 제가 만든 xml 들은 네임스페이스가 없어서 자꾸 까먹고 실수하는것 같아요..
이 참에 내가 만든 xml 에도 네임스페이스를 다 붙여버려 ???!!!!!
[출처] 이과장의 프로그래밍이야기