如何从java中的xsd appinfo元素中提取内容

时间:2014-09-15 14:03:25

标签: xsd xmlbeans

我有一个带有注释元素的xsd,而注释元素又包含appinfo元素。我正在使用appinfo元素传递有关模式的一些自定义信息,并且需要在遍历元素时提取appinfo的内容。

来自xsd。

的片段
<xsd:element name = "Entity">
                <xsd:annotation>
                    <xsd:appinfo>EntityReference</xsd:appinfo>
                </xsd:annotation>
                <xsd:complexType>
                    <xsd:sequence>
                        <xsd:element
                            minOccurs = "0"
                            name = "Id"
                            type = "tns:guid"/>
                        <xsd:element
                            minOccurs = "0"
                            name = "LogicalName"
                            nillable = "true"
                            type = "xsd:string"/>
                        <xsd:element
                            minOccurs = "0"
                            name = "Name"
                            nillable = "true"
                            type = "xsd:string"/>
                    </xsd:sequence>
                </xsd:complexType>
            </xsd:element>

这是我用来从注释中提取应用程序信息的代码。

SchemaAnnotation annotation = element.getAnnotation();
                            if(annotation!=null){
                                XmlObject[] ai = annotation.getApplicationInformation();
                                for(XmlObject obj : ai){
                                    if(obj!=null){
                                        //System.out.println(obj.toString());
                                        obj.getDomNode().getNodeValue();
                                    }
                                }
                            }

但我得到一个空值。然而,obj.toString()返回此

<xml-fragment xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:request="http://ns1" xmlns:tns="http://ns2">EntityReference</xml-fragment>

如何获取内容&#34; EntityReference&#34;来自appinfo?我想编写一个自定义处理程序来解析字符串内容吗?

由于

1 个答案:

答案 0 :(得分:0)

DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();

                                        Document document = builder.parse(new ByteArrayInputStream(obj.toString().getBytes()));
                                        NodeList list = document.getChildNodes();
                                        Node node = list.item(0); 

                                        if (node.getFirstChild() != null
                                                && node.getFirstChild().getNodeType() == Node.TEXT_NODE) {
                                            //Text tn = (Text) node.getFirstChild();

                                            System.out.println(node.getFirstChild().getTextContent());
                                        }