簡體   English   中英

如何從Unziped文件中獲取XML值

[英]How get XML value from Unziped file

我需要獲得像“符號”等價值。 從xml文件發送到列表。

現在我的代碼看起來像這樣:

Scanner sc = null;

    byte[] buff = new byte[1 << 13];
    List<String> question2 = new ArrayList<String>();
    question2 = <MetodToGetFile>(sc,fileListQ);
    for ( String strLista : question2){
    ByteArrayInputStream in = new ByteArrayInputStream(strLista.getBytes());
    try(InputStream reader = Base64.getMimeDecoder().wrap(in)){
    try (GZIPInputStream gis = new GZIPInputStream(reader)) {
    try (ByteArrayOutputStream out = new ByteArrayOutputStream()){
            int readGis = 0;
            while ((readGis = gis.read(buff)) > 0)
                out.write(buff, 0, readGis);
            byte[] buffer = out.toByteArray();
            String s2 = new String(buffer);
     }
    }
   }
  }
 }

我想知道我該如何調整它的值並將“ xxx”和“ zzzz”取值到另一個列表,因為我需要計算一些值。

XML看起來像這樣:

<?xml version="1.0" encoding="utf-8"?>
<Name Name="some value">
<Group Names="some value">
<Package Guid="{7777-7777-7777-7777-7777}">
  <Attribute Typ="" Name="Symbol">xxx</Attribute>
  <Attribute Type="" Name="Surname">xxx</Attribute>
  <Attribute Type="Address" Name="Name">zzzz</Attribute>
  <Attribute Type="Address" Name="Country">zzzz</Attribute>
</Package>

編輯:您好,我希望我的解決方案對某人有用:)

try{
         //Get is(inputSource with xml in s2(xml string value from stream)
                InputSource is = new InputSource(new StringReader(s2));

                DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
                DocumentBuilder db = dbf.newDocumentBuilder();
                Document doc = db.parse(is);
                XPathFactory xpf = XPathFactory.newInstance();
                XPath xpath = xpf.newXPath();
                //Get "some value" from attribut Name
                String name= (String) xpath.evaluate("/Name/@Name", doc, XPathConstants.STRING);
                //Get "guid" from attribute guid
                String guid= (String) xpath.evaluate("/Name/Group/Package/@Guid", doc, XPathConstants.STRING);
                //Get element xxx by tag value Symbol
                String symbol= xpath.evaluate("/Name/Group/Package/Attribute[@Name=\"Symbol\"]", doc.getDocumentElement());
                System.out.println(name);
                System.out.println(guid);
                System.out.println(symbol);
                }catch(Exception e){
                    e.printStackTrace();
                }

如果我能通過我的代碼幫助別人,我會很高興:)

添加這樣的方法來檢索與給定Path表達式匹配的所有元素:

public List<Node> getNodes(Node sourceNode, String xpathExpresion) throws XPathExpressionException {
    // You could cache/reuse xpath for better performance 
    XPath xpath = XPathFactory.newInstance().newXPath();
    NodeList nodes = (NodeList) xpath.evaluate(xpathExpresion,sourceNode,XPathConstants.NODESET);
    ArrayList<Node> list = new ArrayList<Node>();
    for(int i = 0; i < nodes.getLength(); i++) {
        Node node = nodes.item(i);
        list.add(node);
    }
    return list;
}

添加另一種方法來從XML輸入生成文檔:

public Document buildDoc(InputStream is) throws Exception {
    DocumentBuilderFactory fact = DocumentBuilderFactory.newInstance();
    DocumentBuilder parser = fact.newDocumentBuilder();
    Document newDoc = parser.parse(is);
    newDoc.normalize();
    is.close();
    return newDoc;
}

然后把它們放在一起:

InputSource is = new InputSource(new StringReader("... your XML string here"));
Document doc = buildDoc(is);
List<Node> nodes = getNodes(doc, "/Name/Group/Package/Attribute");
for (Node node: nodes) {
    // for the text body of an element, first get its nested Text child
    Text text = node.getChildNodes().item(0);
    // Then ask that Text child for it's value
    String content = node.getNodeValue();
}

我希望我能正確地復制和粘貼它。 我從我的一個開源項目中的一個工人階級那里得到了這一點,並對其進行了一些整理以回答您的特定問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM