java - XQUERY JAVA 不工作

标签 java xml xquery

我从复杂的 XML 文件中获取一些属性:

<rsp>
    <csl  d='10775.916760613756' id='2003' nam='AUTOS TEZIUTLÁN, S.A. DE C.V.' 
          adr='KM. 1 CARR. TEZIUTLÁN-TLAPACOYAN' tel='231312-12-05' 
          lat='19.826765' lon='-97.347906' />
    <csl  d='10789.680721293766' id='2019' nam='AUTOMOVILÍSTICA DE TEHUACAN, S.A. DE C.V.' 
          adr='BLVD. ADOLFO LOPEZ MATEOS NO. 3623' tel='238382-44-33' 
          lat='18.467281' lon='-97.417901' />
    <csl  d='10848.586325071066' id='2013' nam='AUTOMOTRIZ DE LA SIERRA, S.A. DE C.V.' 
          adr='AUSENCIO T. JIMÉNEZ No. 1' tel='776762-05-42' 
          lat='20.174386' lon='-98.06125' />
    <csl  d='10866.815936520663' id='2028' nam='MOTORES ALEMANES RIVERA S.A. DE C.V.' 
          adr='CALZADA IGNACIO ZARAGOZA NO. 180' tel='222286-02-02' 
          lat='19.064258' lon='-98.179042' />
    <csl  d='10867.374198658401' id='2012' nam='ARMENTA AUTOMOTRIZ, S.A. DE C.V.' 
          adr='24 NORTE No. 214' tel='222235-87-68' 
          lat='19.038912' lon='-98.183101' />
</rsp>

但是我的 XQUERY 只给我第一个属性,并且只给我使用此类的属性:

public class XMLParser {

private String[] resultTable;

public XMLParser(){}

public String[] stringToXML(String xmlString)   {

    try{

        DocumentBuilderFactory dBuilderFactory = DocumentBuilderFactory.newInstance();
        DocumentBuilder dBuilder = dBuilderFactory.newDocumentBuilder();
        InputSource iSource = new InputSource();
        iSource.setCharacterStream(new StringReader(xmlString));
        Document doc = dBuilder.parse(iSource);
        NodeList nList = doc.getElementsByTagName("tpr");
        resultTable = new String [nList.getLength()];

        for (int i=0; i<nList.getLength(); i++){

            Element e = (Element)nList.item(i);
            NodeList pCode = e.getElementsByTagName("tpr");
            Element line = (Element)pCode.item(0);
            resultTable[i] = getCharacterDataFromElement(line);

        }
    }
    catch(Exception e)  {           
        e.printStackTrace();            
    }

    return resultTable;
}

public static String getCharacterDataFromElement(Element e) {

    Node child = e.getFirstChild();

    if (child instanceof CharacterData) {       
        CharacterData cData = (CharacterData) child;
        return cData.getData();         
    }

    return "null";
}

public static String getParamByXPath(String xmlString, String expression)   {

    String ret = "";
    XPath xpath = XPathFactory.newInstance().newXPath();

    try{

        DocumentBuilderFactory dBuilderFactory = DocumentBuilderFactory.newInstance();
        DocumentBuilder dBuilder = dBuilderFactory.newDocumentBuilder();
        InputSource iSource = new InputSource();
        iSource.setCharacterStream(new StringReader(xmlString));
        Document doc = dBuilder.parse(iSource);
        XPathExpression exp = xpath.compile(expression);
        Object result = exp.evaluate(doc);

        if (result instanceof String) ret = (String)result;
        else if (result instanceof Boolean) ret = result.toString();
        else if (result instanceof Double) ret = result.toString();
        else if (result instanceof NodeList)    {

            NodeList list = (NodeList) result;
            Node node = list.item(0);
            Log.d("LIST", Integer.toString(list.getLength()));
            ret = node.getTextContent();

        }

    }catch(Exception e) {           
        e.printStackTrace();            
    }

    return ret;     
}

我正在使用此行调用该方法:

String loc1 = XMLParser.getParamByXPath(service, "//@d");

我一直在使用其他查询,但结果始终是第一个元素...我可能会缺少什么?

最佳答案

//@d XPath 将返回文档中所有 @d 属性节点的列表。

您的 Java 代码:

  else if (result instanceof NodeList)    {
        NodeList list = (NodeList) result;

        Node node = list.item(0); // <-- THIS ONE HERE

        Log.d("LIST", Integer.toString(list.getLength()));
        ret = node.getTextContent();
    }

然后将获取第一个(list.item(0)),这就是您所得到的。

看来您的“问题”与 Java 逻辑有关,而不是 XPath。

关于java - XQUERY JAVA 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10805333/

相关文章:

sql-server - SQL Server : how to remove leading 'A' s from base64 string

具有恒定堆大小的 Java 进程在操作系统中分配越来越多的内存

java - WebSocket 消息代理的 Android 客户端

java - 有没有办法在Android运行时任意加载资源?

html - 通过带有字符通配符的属性值选择带有 Xpath 的元素

distinct - XQuery 不同值与 where 子句问题

java - 是否可以用堆实现最小优先级队列,或者是否需要二叉堆?

java - 如何通过 rgb 值获取颜色名称?

java - Android fragment - 编辑另一个 fragment 的文本

xml - 非常规范式/解析 XML