名前空間付きのXMLのエレメントの取得方法は以前書いたが、名前空間付きの属性はどのように取得したらいいのだろうか?
下のような例で、sheet要素のr:id属性を取得してみようと思う。
(どこかで見たことあるようなXMLと思った方は、そう、そのデータを解析しているのです。)
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<workbook
xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main"
xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships">
<fileVersion appName="xl" lastEdited="4" lowestEdited="4" rupBuild="4505" />
<workbookPr defaultThemeVersion="124226" />
<bookViews>
<workbookView xWindow="120" yWindow="120" windowWidth="14940" windowHeight="13500" />
</bookViews>
<sheets>
<sheet name="Sheet1" sheetId="1" r:id="rId1" />
<sheet name="Sheet2" sheetId="2" r:id="rId2" />
<sheet name="Sheet3" sheetId="3" r:id="rId3" />
</sheets>
<calcPr calcId="114210" />
</workbook>
[as]
var _xml:XML = XML(data); <– ここに上の例のXMLがある前提。
var _ns:Namespace = _xml.namespace();
var _nsR:Namespace = _xml.namespace(“r”);
trace(_xml._ns::sheets._ns::sheet.(@sheetId == “1″).@_nsR::id);
[/as]
という感じで、通常のエレメントと同じように、@_nsR::id のようにすればいいようです。
ちなみに、XMLから値を取得するときに以下のように、条件を記述できるのです。
sheetId属性が”1″のsheet要素を取得するという意味です。
[as]
_xml._ns::sheets._ns::sheet.(@sheetId == “1″);
[/as]
これ、最近までしりませんでした。


