当前位置: 首页 > 面试题库 >

SAX解析-获取文本节点的有效方法

酆耀
2023-03-14
问题内容

给出了这个XML代码

<?xml version="1.0"?>
<catalog>
   <book id="bk101">
      <author>Gambardella, Matthew</author>

在SAX中,很容易获得属性值:

@Override
public void startElement (String uri, String localName,
              String qName, Attributes attributes) throws SAXException{
    if(qName.equals("book")){
        String bookId = attributes.getValue("id");
        ...
    }
}

但是要获得文本节点的值,例如<author>标签的值,这是很难的…

private StringBuffer curCharValue = new StringBuffer(1024);

@Override
public void startElement (String uri, String localName,
              String qName, Attributes attributes) throws SAXException {
    if(qName.equals("author")){
        curCharValue.clear();
    }
}

@Override
public void characters (char ch[], int start, int length) throws SAXException
{
     //already synchronized
    curCharValue.append(char, start, length);
}

@Override
public void endElement (String uri, String localName, String qName)
throws SAXException
{
    if(qName.equals("author")){
        String author = curCharValue.toString();
    }
}
  1. 我不确定以上示例是否有效,您如何看待这种方法?
  2. 有没有更好的办法?(获取文本节点的值)

问题答案:

这是使用SAX的通常方法。

只是要注意characters()每个标签可能被调用多次。这是一个完整的例子。

否则,您可以尝试使用StAX。



 类似资料:
  • 我可以使用以下方法获取第一个

  • 问题内容: 我有一段这样的HTML: 我有一个与此HTML匹配的WebElement。如何从中仅提取“标题”?方法.getText()返回“ Title \ nAuthor”。 问题答案: 您无法在WebDriver API中执行此操作,而必须在代码中执行。例如: 请注意,结尾的换行符实际上是元素文本的一部分,因此,如果您不想要它,则需要将其删除。

  • 问题内容: 我正在尝试从这样的站点地图中提取URL:https : //www.bestbuy.com/sitemap_c_0.xml.gz 我已经解压缩并将.xml.gz文件另存为.xml文件。结构如下: 我正在尝试使用ElementTree提取整个文件中 loc 节点内的所有URL ,但仍在努力使其正常工作。 根据文档,我正在尝试这样的事情: 但是,没有任何东西可以载入价值。我的目标是提取lo

  • 本文向大家介绍Sax解析xml_动力节点Java学院整理,包括了Sax解析xml_动力节点Java学院整理的使用技巧和注意事项,需要的朋友参考一下 JAVA 解析 XML 通常有两种方式,DOM 和 SAX。DOM 虽然是 W3C 的标准,提供了标准的解析方式,但它的解析效率一直不尽如人意,因为使用DOM解析XML时,解析器读入整个文档并构建一个驻留内存的树结构(节点树),然后您的代码才可以使用

  • 问题内容: 我希望获得“我是文本节点”,不希望删除“ edit”标签,并且需要跨浏览器解决方案。 问题答案: 这将获取所选元素的,然后对其应用过滤功能。过滤器功能仅返回文本节点(即带有的节点)。

  • 问题内容: 如何使用PHP DOM从此标记中提取字符串“文本”? 包括“ notthis” 问题答案: 只要您可以影响DOM,就可以将其删除。 或者,只需访问的文本节点。 如果最终有更多的文本节点并且只想要第一个,则可以在的第一个赋值之后。