0

これは私の XML (wls.xml) です。

<?xml version="1.0"?>
    <note>
    <to>Tove</to>
    <from>Jani</from>
    <heading>Reminder</heading>
    <body>Don't forget me this weekend!</body>
</note>

これが XSD (wls.xsd)

<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

<xs:element name="note">
     <xs:complexType>
       <xs:sequence>
         <xs:element name="to" type="xs:string"/>
         <xs:element name="from" type="xs:string"/>
         <xs:element name="heading" type="xs:string"/>
         <xs:element name="body" type="xs:string"/>
       </xs:sequence>
    </xs:complexType>

これは、Xpathを使用して上記のファイルを解析するために使用したJavaクラスです

public static void test1()
{
    String ipFile="w3s.xml";//wls.xsd

    Node fetchNode=null;

    FileInputStream fileip;
    try {
        fileip = new FileInputStream(new File(ipFile));

        DocumentBuilder builder =   DocumentBuilderFactory.newInstance().newDocumentBuilder();      
        Document xmlDocument = builder.parse(fileip);

        System.out.println(xmlDocument.getDocumentElement().getNodeName());
        System.out.println(xmlDocument.getDocumentElement().getLocalName());
        evalXpath(xmlDocument,"//xs:element");//FAILS
        evalXpath(xmlDocument,"//element");//FAILS
        evalXpath(xmlDocument,"/schema/element");//WORKS
        evalXpath(xmlDocument,"/xs:schema/xs:element");//FAILS
        evalXpath(xmlDocument,"//heading");//FAILS



    } catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (SAXException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (ParserConfigurationException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }       
}


public static void evalXpath(Document xmlDocument,String expression)
{
    Node fetchNode=null;
    NodeList fetchNodeList=null;
    //String expression=null;
    try
    {
        XPath xPath =  XPathFactory.newInstance().newXPath(); 

        fetchNode = (Node) xPath.compile(expression).evaluate(xmlDocument, XPathConstants.NODE);
        System.out.println(fetchNode);

        fetchNodeList = (NodeList) xPath.compile(expression).evaluate(xmlDocument, XPathConstants.NODESET);
        System.out.println(fetchNodeList.getLength());
    }
    catch (XPathExpressionException e) {
        e.printStackTrace();
    }    
}

}

XML ファイルを解析し、タイプ '\ElemName' の式を実行すると、問題なく動作し、ノードがフェッチされます。それから、NULLを返すXSDファイルに対して同じことをしません。XSD の場合は、'\RootNode\IntermediateNode....\ReqdNode' を訴える必要があります。XML と XSD の名前を変えて試してみましたが、説明のためにこれらの短いファイルを添付しただけです。

問題 2 また、もう 1 つ問題があります。要素 'xs:schema' があり、'schema' のようなローカル名部分 (名前空間プレフィックスなし) のみを取得する必要がある場合、どうすればよいですか? getLocalName() を試しましたが、うまくいきません。

(知る必要がある場合はjdk6を使用しています)

少なくとも最初の問題の解決策を提供してください。

前もって感謝します。

4

1 に答える 1