Как я могу сделать, чтобы найти в XML с побитовым и с xpath и Java? - PullRequest
1 голос
/ 31 августа 2011

У меня есть образец xml .

Каждая строка имеет поле идентификатора, оно имеет значения в виде битов.

И я хочу найти в этом файле с побитовой-и оператор, но я не знаю, возможно ли это.

Я читал об операторе '&' в javascript или команде BITAND в Oracle, но ничего в xml o xpath.

Этопример кода в java и xpath:

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathConstants;

import javax.xml.xpath.XPathFactory;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

public class Util implements java.io.Serializable  {

    static public String filter_xpath_bitand (int var_tipo)

        NodeList nodeList = null;
        Element  element  = null;
        try {
            XPath xpath = XPathFactory.newInstance().newXPath();
            DocumentBuilderFactory factory  = DocumentBuilderFactory.newInstance();
            DocumentBuilder        builder  = factory.newDocumentBuilder();
            Document            document = builder.parse(new File(fileXML));      
           nodeList = (NodeList)xpath.evaluate("/test/row[(id & \""+ var_tipo +"\") > 1]", document.getDocumentElement(), XPathConstants.NODESET);
        } catch (Exception e) {
            System.out.println("*** filterXML --> exception: " + e.toString());
        }

    }

}

1 Ответ

1 голос
/ 31 августа 2011

При просмотре справочника XPATH нет такой вещи, как побитовые операции.

Вы можете обойти это, хотя, используя существующие операции (мод и т. Д.).

См. здесь для соответствующего вопроса.

РЕДАКТИРОВАТЬ:

Пример XML:

<?xml version="1.0" encoding="UTF-8"?>
<test>
    <row>
        <id>32</id>
        <titulo>yellow</titulo>
    </row>
    <row>
        <id>16</id>
        <titulo>green</titulo>
    </row>
    <row>
        <id>8</id>
        <titulo>red</titulo>
    </row>
    <row>
        <id>1</id>
        <titulo>blue</titulo>
    </row>
    <row>
        <id>2</id>
        <titulo>white</titulo>
    </row>
    <row>
        <id>4</id>
        <titulo>black</titulo>
    </row>
</test>

Java-код:

import java.io.File;
import java.util.HashSet;
import java.util.Set;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathConstants;

import javax.xml.xpath.XPathFactory;

import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

public class BitWiseXPathTest {

    public static void main(String[] args) {

        Set<String> selectedColors = new HashSet<String>();
        int var_tipo = 33;
        try {
            XPath xpath = XPathFactory.newInstance().newXPath();
            DocumentBuilderFactory factory = DocumentBuilderFactory
                    .newInstance();
            DocumentBuilder builder = factory.newDocumentBuilder();
            String fileXML = "bitwise.xml";
            Document document = builder.parse(new File(fileXML));

            String evalStr = "/test/row/id";
            NodeList nodeList = (NodeList)xpath.evaluate(evalStr, document.getDocumentElement(), XPathConstants.NODESET);

            for (int i = 0; i < nodeList.getLength(); i++) {
                Node aNode = nodeList.item(i);
                if( (Integer.parseInt(aNode.getTextContent()) & var_tipo) > 0) {
                    //System.out.println("color: "+aNode.getNextSibling().getNextSibling().getTextContent());
                    selectedColors.add(aNode.getNextSibling().getNextSibling().getTextContent());
                }
            }

        } catch (Exception e) {
            System.out.println("*** filterXML --> exception: " + e.toString());
        }

        System.out.println(selectedColors);

    }

}

Опять же, XPATH, похоже, не имеет побитовой операции.Вы можете переместить операцию за пределы XPATH и сделать это на Java в качестве обходного пути.

...