日期:2014-05-20  浏览次数:20725 次

dom4j解析基于xml的文档——获取属性问题
dom4j解析基于xml的文档,给出如下一对元素:
<bpel:process name="CaculatorProcess"

  targetNamespace="http://www.pku.edu.cn/bpel/sample"

  suppressJoinFailure="yes"

  xmlns:tns="http://www.pku.edu.cn/bpel/sample"

  xmlns:bpel="http://docs.oasis-open.org/wsbpel/2.0/process/executable"

  xmlns:ns1="http://add.example.ws" xmlns:ns2="http://sub.example.ws">
...
</bpel:process>
要获取元素<bpel:process>的属性,但实际只能获取前三个属性,即name, tartgetNamespace, suppressJoinFailure。而后四个属性则获取不到。
源代码如下:
Java code

public class testDom {

    /**
     * @param args
     * @throws IOException 
     */
    public static void testDom4() throws DocumentException, IOException{
        SAXReader saxR = new SAXReader();
        Document document = saxR.read("D:/source/CaculatorProcess.bpel");
        Element root = document.getRootElement();
            Iterator iter1 = root.attributeIterator();
            for(;iter1.hasNext();){
                Attribute attr = (Attribute)iter1.next();
                System.out.println(attr.getName());
            }
        
    }
    public static void main(String[] args) throws DocumentException, IOException, WSDLException {
        // TODO Auto-generated method stub
        testDom4();
    }
    
}


若将后四个属性的前半部分(如"xmls:")去掉,则是可以解析出后半部分的(如"tns")。
请问在不改动源文档的情况下,如何才能获取后三个属性?????
谢谢!!!

------解决方案--------------------
xmlns是名空间Element.getNamespaceURI()可以获得

xmlns:xsi –> Element.getNamespaceForPrefix("xsi").getURI()

xsi:schemaLocation –> el.selectSingleNode("@xsi:schemaLocation").getText()