以下のように XML から xsi:type 属性値を抽出したい
<interface xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="SerialInterface">
ここで xsi:type 属性値、つまりSerialInterfaceを抽出したいと思います。
私は使用しようとしていましnode.getAttributeValue
たが、それは正確には機能していません
StAXを使用します。
XMLStreamReader xr = XMLInputFactory.newInstance().createXMLStreamReader(new StringReader(s));
xr.next();
String type = xr.getAttributeValue(0);
属性インデックス 0 を使用したことに注意してください。これは、XML パーサーが xmlns:xsi 属性を返さないためです。
これは SAX ベースのバージョンです
String s = "<interface xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:type=\"SerialInterface\" />";
final StringBuilder type = new StringBuilder();
SAXParserFactory.newInstance().newSAXParser()
.parse(new ByteArrayInputStream(s.getBytes()), new DefaultHandler() {
@Override
public void startElement(String uri, String localName, String qName,
Attributes attrs) throws SAXException {
if (type.length() == 0) {
type.append(attrs.getValue("xsi:type"));
}
}
});
System.out.println(type);
出力
SerialInterface