标签: saxparser

在Android中从res/xml打开XML文件

我创建了一个Java应用程序,它打开一个看起来像这样的xml文件:

<AnimalTree>
  <animal>
    <mammal>canine</mammal>
    <color>blue</color>
  </animal>
  <!-- ... -->
</AnimalTree>
Run Code Online (Sandbox Code Playgroud)

我可以用以下方式打开它:

File fXmlFile = getResources.getXml("res/xml/data.xml");
DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
Document doc = dBuilder.parse(fXmlFile);
doc.getDocumentElement().normalize();
NodeList animalNodes = doc.getElementsByTagName("animal");
Run Code Online (Sandbox Code Playgroud)

然后我可以简单地创建一个节点,将对象推送到ListArray中,然后在循环ListArray时执行我想要的对象.

for (int temp = 0; temp < animalNodes.getLength(); temp++) {
Node nNode = animalNodes.item(temp);     
if (nNode.getNodeType() == Node.ELEMENT_NODE) {
Element eElement = (Element) nNode;
question thisAnimal = new animal();
thisAnimal.mammal = getTagValue("mammal",eElement);
// ...
Run Code Online (Sandbox Code Playgroud)

干净利落!现在只在Android中我不能简单地读取文件" res/xml/data.xml",因为" File();"需要一个String不是integer(id).这是我迷失的地方.有没有办法可以" File();"打开文件,或者如果不使用SAXparser或者这是不可能的 …

xml android file local saxparser

7
推荐指数
1
解决办法
3万
查看次数

SAXParser和XMLReader之间的区别

下面两个片段有什么区别,如果我只需要解析XML?

1.使用SAXParser parse方法:

SAXParserFactory sfactory = SAXParserFactory.newInstance();
SAXParser parser = sfactory.newSAXParser();
parser.parse(new File(filename), new DocHandler());
Run Code Online (Sandbox Code Playgroud)

现在使用parse从SAXParser获取的XMLReader 方法

SAXParserFactory sfactory = SAXParserFactory.newInstance();
SAXParser parser = sfactory.newSAXParser();
XMLReader xmlparser = parser.getXMLReader();
xmlparser.setContentHandler(new DocHandler());
xmlparser.parse(new InputSource("test1.xml"));   
Run Code Online (Sandbox Code Playgroud)

尽管获得了更大的灵活性,还有其他区别吗?

java saxparser xml-parsing

7
推荐指数
1
解决办法
1万
查看次数

使用SAXParser时为什么会出现"MalformedURLException:no protocol"?

我正在将代码从应用程序的一部分(applet)复制到应用程序内部.我正在将XML解析为String.自从我解析XML以来已经有一段时间了,但是从抛出的错误看起来它可能与找不到.dtd有关.堆栈跟踪使得很难找到错误的确切原因,但这里是消息:

java.net.MalformedURLException: no protocol: <a href="http://www.mycomp.com/MyComp.dtd">http://www.mycomp.com/MyComp.dtd</a>
Run Code Online (Sandbox Code Playgroud)

并且XML将此作为第一对行:

<?xml version='1.0'?>
<!DOCTYPE MYTHING  SYSTEM '<a href="http://www.mycomp.com/MyComp.dtd">http://www.mycomp.com/MyComp.dtd</a>'>
Run Code Online (Sandbox Code Playgroud)

这是相关的代码片段

class XMLImportParser extends DefaultHandler {

  private SAXParser m_SaxParser = null;
  private String is_InputString = "";

  XMLImportParser(String xmlStr) throws SAXException, IOException {
    super();
    is_InputString = xmlStr;
    createParser();
    try {
      preparseString();
      parseString(is_InputString);
    } catch (Exception e) {
       throw new SAXException(e); //"Import Error : "+e.getMessage());
    }
  }

  void createParser() throws SAXException {
    SAXParserFactory factory = SAXParserFactory.newInstance();
    factory.setValidating(true);
    try {
        factory.setFeature("http://xml.org/sax/features/namespaces", true);
        factory.setFeature("http://xml.org/sax/features/namespace-prefixes", true);
        m_SaxParser = factory.newSAXParser();
        m_SaxParser.getXMLReader().setFeature("http://xml.org/sax/features/namespaces", true); …
Run Code Online (Sandbox Code Playgroud)

java xml saxparser

6
推荐指数
1
解决办法
2万
查看次数

SAXParser相当于C#

我有以下java代码,我需要在C#中转换这些,请帮助我..

public class Configuration {

  private ConfigContentHandler confHandler;

  public Configuration() {
  }

  public boolean parseConfigFile() throws Exception {
    boolean bReturn = true;

    SAXParser parser = SAXParserFactory.newInstance().newSAXParser();

    System.out.println("*** Start parsing");

    try {
       confHandler = new ConfigContentHandler(100);
       // Configuration file must be located in main jar file folder

       // Set the full Prosper file name
       String sConfigFile = "configuration.xml";

       // Get abstract (system independent) filename
       File fFile = new File(sConfigFile);

       if (!fFile.exists()) {
          System.out.println("Could not find configuration file " + sConfigFile + …
Run Code Online (Sandbox Code Playgroud)

c# saxparser

6
推荐指数
2
解决办法
1万
查看次数

使用SAX解析器,如何解析具有相同名称标签但在不同元素中的xml文件?

是否可以在SAX解析器中提供路径表达式?我有一个XML文件,它有几个相同的名称标签,但它们在不同的元素中.有没有办法区分它们.这是XML:

<Schools>
    <School>
        <ID>335823</ID> 
        <Name>Fairfax High School</Name> 
        <Student>
            <ID>4195653</ID>
            <Name>Will Turner</Name>
        </Student>
        <Student>
            <ID>4195654</ID>
            <Name>Bruce Paltrow</Name>
        </Student>
        <Student>
            <ID>4195655</ID>
            <Name>Santosh Gowswami</Name>
        </Student>
    </School>
    <School>
        <ID>335824</ID> 
        <Name>FallsChurch High School</Name> 
        <Student>
            <ID>4153</ID>
            <Name>John Singer</Name>
        </Student>
        <Student>
            <ID>4154</ID>
            <Name>Shane Warne</Name>
        </Student>
        <Student>
            <ID>4155</ID>
            <Name>Eddie Diaz</Name>
        </Student>
    </School>
</Schools>
Run Code Online (Sandbox Code Playgroud)

我想根据学校的名称和ID区分学生的姓名和身份证.

谢谢你的回复:

我创建了一个学生pojo,其中包含以下字段:school_id,school_name,student_id和student_name以及getter和setter方法.这是我的临时解析器实现.当我解析xml时,我需要将学校名称,id,学生姓名,id的值放在pojo中并返回它.你能告诉我如何实现堆栈以区分.这是我的解析器框架::

import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;

public class HandleXML extends DefaultHandler {

    private student info;
    private boolean school_id = false;
    private boolean school_name = false;
    private boolean student_id = false;
    private boolean …
Run Code Online (Sandbox Code Playgroud)

java xml xpath saxparser xml-parsing

6
推荐指数
2
解决办法
2万
查看次数

Android:解析XML数据的最佳解析器

我正在开发一个应用程序,其中第一次我要解析来自远程服务器的xml文件中的数据.

但我无法选择哪种解析器有效或最适合解析.由于主要有三种类型的解析,我知道:

  1. SAX
  2. XMLPullParsing
  3. DOM

哪个是解析数据的最佳解析器?当我在Google上搜索并发现上述解析器的正反两面时.但我无法确定哪种效率最高.

XML具有大量标签的大量数据.

请指导我并建议我应该使用哪个解析器,因为我在我的应用程序中第一次使用解析.

android saxparser xmlpullparser android-parser android-xml

6
推荐指数
2
解决办法
6174
查看次数

如何在startElement中使用SAX解析器从XML获取元素的值?

是否可以从startElement函数中获取元素的内容,该函数是SAX处理程序的覆盖函数?

以下是规格.

1)XML文件

<employees>
   <employee id="111">
      <firstName>Rakesh</firstName>
      <lastName>Mishra</lastName>
      <location>Bangalore</location>
   </employee>
   <employee id="112">
      <firstName>John</firstName>
      <lastName>Davis</lastName>
      <location>Chennai</location>
   </employee>
   <employee id="113">
      <firstName>Rajesh</firstName>
      <lastName>Sharma</lastName>
      <location>Pune</location>
   </employee>
</employees>
Run Code Online (Sandbox Code Playgroud)

2)startElement功能

@Override
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
    .......code in here..........
}
Run Code Online (Sandbox Code Playgroud)

3)预期结果

element name   : employee
attribute name : id
attribute value: 111
firstName      : Rakesh
lastName       : Mishra
location       : Bangalore

element name   : employee
attribute name : id
attribute value: 112
firstName      : …
Run Code Online (Sandbox Code Playgroud)

java xml sax saxparser

6
推荐指数
1
解决办法
3万
查看次数

如何使用Java中的XPath从XML中获取特定节点?

我的xml文件结构是这样的

<?xml version="1.0" encoding="utf-8" ?>
<book>
    <chapters>
        <chapter id="1">
            <page id="1" cid= "1" bid = "Book1">
                <text>Hi</text>
            </page>
            <page id="2" cid= "1" bid = "Book1">
                <text>Hi</text>
            </page>
        </chapter>
        <chapter id="2">
            <page id="1" cid= "2" bid = "Book1">
                <text>Hi</text>
            </page>
            <page id="2" cid= "2" bid = "Book1">
                <text>Hi</text>
            </page>
        </chapter>
        <chapter id="3">
            <page id="1" cid= "3" bid = "Book1">
                <text>Hi</text>
            </page>
            <page id="2" cid= "3" bid = "Book1">
                <text>Hi</text>
            </page>
        </chapter>
    </chapters>
</book>
Run Code Online (Sandbox Code Playgroud)

我希望通过传递页面ID和章节ID来获取特定的页面节点.我怎样才能做到这一点?

此外,书籍节点包含太多章节,每章包含许多页面.所以,我正在使用SAX解析器来解析内容.

java xml xpath android saxparser

6
推荐指数
1
解决办法
230
查看次数

Sax - ExpatParser $ ParseException

我正在制作一个读取XML Internet的Android应用程序.此应用程序使用SAX来解析XML.这是我解析部分的代码:

public LectorSAX(String url){
    try{
        SAXParserFactory spf=SAXParserFactory.newInstance();
        SAXParser sp = spf.newSAXParser();
        DefaultHandler lxmlr=new LibraryXMLReader() ;
        sp.parse(url, lxmlr);

        nodo=((LibraryXMLReader)lxmlr).getNodoActual();

    }catch(ParserConfigurationException e){ 
        System.err.println("Error de parseo en LectorSAX.java: "+e);
    }catch(SAXException e){
        System.err.println("Error de sax LectorSAX.java: " + e);
    } catch (IOException e){
        System.err.println("Error de  io LectorSAX.java: " + e);
    }
}
Run Code Online (Sandbox Code Playgroud)

问题是SAXException发生.异常消息如下:

org.apache.harmony.xml.ExpatParser $ ParseException:在第4行,第42列:格式不正确(无效令牌)

但是,如果我将相同的代码放在普通的Java SE应用程序中,则不会发生此异常,一切正常.

为什么相同的代码在Java SE应用程序中运行良好,而不是Android?另一方面,如何解决问题?

谢谢您的帮助.

问候.

java android sax saxparser xml-parsing

5
推荐指数
1
解决办法
6199
查看次数

使用SAX在Java中解析XML:将值减少两半

我正在尝试读取基于xml的文件格式,并在JAVA中使用SAX称为mzXML.它携带部分编码的质谱数据(具有强度的信号).

这就是感兴趣的条目看起来像(有更多的信息):

    <peaks ... >eJwBgAN//EByACzkZJkHP/NlAceAXLJAckeQ4CIUJz/203q2...</peaks>
Run Code Online (Sandbox Code Playgroud)

可以在此处下载一个强制错误的完整文件.

其中一个条目中的String包含大约500个压缩和base64编码的双精度对(信号和强度).我所做的是解压缩和解码,以获取值(解码未在下面的示例中显示).这对小型数据集来说都很好.现在我使用了更大的一个,我遇到了一个我不理解的问题:

过程字符(ch,start,length)不会读取之前显示的行中的完整条目.该长度值似乎是小.

当我刚刚将峰值条目打印到控制台时,我没有看到这个问题,因为有很多字母而且我没有意识到字母丢失了.但是当缺少信息时,减压失败了.当我重复运行这个程序时,它总是在同一点打破同一行而不给出任何异常.如果我通过删除扫描来更改mzXML文件,它会在不同的位置中断.我在character()过程中使用断点查看currentValue的内容时发现了这一点

以下是概括问题所需的一段代码:

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.zip.DataFormatException;
import java.util.zip.Inflater;

import javax.xml.bind.DatatypeConverter;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;

import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;

public class ReadXMLFile {

    public static byte[] decompress(byte[] data) throws IOException, DataFormatException { 
        Inflater inflater = new Inflater();  
        inflater.setInput(data); 

        ByteArrayOutputStream outputStream = new ByteArrayOutputStream(data.length); 
        byte[] buffer = new byte[data.length*2]; 
        while (!inflater.finished()) { 
            int count = inflater.inflate(buffer); 
            outputStream.write(buffer, 0, count); 
        } …
Run Code Online (Sandbox Code Playgroud)

java xml sax saxparser

5
推荐指数
1
解决办法
1715
查看次数