- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 SAX API 来解析 xml 文档,但很难从 XML 中的每个位置存储元素 PCDATA。
Oracle 文档 SAX API显示字符()用于从元素解析 PCDATA,但我不确定应该如何调用它。
在我当前的实现中, boolean 标志用于在遇到 XML 文档中的某个元素时发出信号。当遇到元素时,这些标志将在 startElement()
中触发。
我在 charaters()
中的 boolean 变量 description
上设置了断点,但 boolean 值直到 startElement()
才设置为 true被调用,意味着 PCDATA 永远不会被解析。
我的问题是在 startElement()
中设置 boolean 值后如何调用characters()?
这是在 charaters()
之后调用的 startElement()
:
public void startElement(String namespaceURI, String localName, String qName, Attributes atts) throws SAXException {
if (qName.equals("location")){
location = true;
System.out.println("Found a location...");
try {
//Read in the values for the attributes of the element <location>
int locationID = Integer.parseInt(atts.getValue("id"));
String locationName = atts.getValue("name");
//Generate a new instance of Location on-the-fly using reflection. The statement Class.forName("gmit.Location").newInstance(); invokes the
//Java Class Loader and the calls the null (default) constructor of Location.
Location loc = (Location) Class.forName("gmit.Location").newInstance();
loc.setId(locationID); //Now configure the Location object with an ID, Name, Description etc...
loc.setName(locationName);
loc.setDescription(locationDescription);
} catch (Exception e) {
e.printStackTrace();
}
}else if (qName.equals("description")){
description = true;
//need to invoke the charaters method here after the description
//flag is set to true
System.out.println("Found a description. You should tie this to the last location you encountered...");
}
charaters()
会在程序启动时立即调用,但需要在上述方法中设置 boolean 标志后调用:
public void characters(char[] ch,int start, int length) throws SAXException{
if (location){
}else if (description){
locationDescription = new String( ch, start, length);
System.out.println("Description = " + locationDescription);
}
XML 文件中的位置之一的示例:
<location id="1" name="Tiberius">
<description>
You are in the city of Tiberius. You see a long street with high buildings and a castle.You see an exit to the south.
</description>
<exit title="Desert" direction="S"/>
</location>
最佳答案
how can I call the characters() after the boolean values are set in startElement() ?
你不能。 SAX 解析的重点是解析器调用您的处理程序,而不是您调用解析器。
每次 SAX 解析器在文档中遇到字符数据时,都会调用您的 characters
方法。您的处理程序将需要确定此数据是否相关(是位置、描述还是可以忽略的内容?),如果相关,则将此数据存储在以后可以检索的地方。
您已经向我们展示了您正在使用的 startElement
方法。如果您还没有这样做,您还需要重写 endElement
。您需要在 endElement
方法中将 boolean 值 location
和 description
设置为 false
,以便您的 SAX 处理程序知道它不再位于适当的 location
或 description
元素内。
您还没有向我们展示示例 XML 文档。也许你有这样的事情:
<widgetList>
<widget>
<name>First widget</name>
<location>Over there</location>
<description>This is the first widget in the list</description>
</widget>
<widget>
<name>Second widget</name>
<location>Very far away</location>
<description>This is the second widget in the list</description>
</widget>
</widgetList>
如果是这样,您可能还想处理 widget
元素的结尾。例如,这可以获取处理程序遇到的最后一个位置和描述,将它们放在一个 Widget
对象中,并将其存储在处理程序内的某个列表中。在解析结束时,您可以从处理程序中读取小部件列表。
关于java - 使用 SAX 字符方法从 XML 元素解析 PCDATA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29323687/
我的 .xml 结构可能有以下数据: nmWinMultiReports_main string nmJ
PCDATA和CDATA的一个松散定义似乎是 PCDATA 是字符数据,但是要解析的。 CDATA是字符数据,不需要解析。 但是后来有人告诉我 CDATA 实际上被解析了或者 PCDATA 实际上没有
目前,如果我尝试解析 First bit of text Second bit of text 我只得到 文本的第一位 parent.text().get()
我正在寻找使用 pugixml(版本 1.6)替换节点 pcdata 的优雅解决方案。例如,遍历节点集并将子值更新为某物。 pugi::xpath_node_set nodes = document.
使用 DTD 验证器 here , 我被告知以下 DTD 无效。 错误消息是:“在元素类型“H”的声明中需要一个 '(' 字符或元素类型。”在第 2 行第 22 列。 谁能指出为什么它无效?我怎
我正在使用 SAX API 来解析 xml 文档,但很难从 XML 中的每个位置存储元素 PCDATA。 Oracle 文档 SAX API显示字符()用于从元素解析 PCDATA,但我不确定应该如何
我花了上周阅读和重新阅读 pugixml 文档,但找不到使用 xpath 检索 PCDATA 的方法。 请解释我是否会从标题中提取文本: Hello! 上次我问这个问题时,我得到的唯一答案是通用 xp
很遗憾,我需要生成一些困惑的 XML。 主文档必须包含嵌入的 XML 文档。但是,嵌入文档出现在 CDATA 部分中。最终结果应如下所示: ]]
在 XML DTD 中——当定义一个元素时,我们使用#PCDATA 表示这个元素可以包含任何可解析的文本。在定义一个属性时,我们用CDATA表示它的值可以是任何字符数据。 XML 中使用的 CDATA
我们可以像这样在 DTD 中声明一个元素吗: 谢谢 最佳答案 如果您尝试声明一个空元素或可能包含字符数据(文本)的元素,那么不可以,您不能声明这样的元素。 请参阅 specs 中的“内容规范” :
我有一堆 XML 文件和 DTD,每个文件都有一个 部分。 TEXT 的 DTD元素看起来像这样: 这是一个示例 XML 文件的样子: ... Some text that I wa
这个问题在这里已经有了答案: How to parse invalid (bad / not well-formed) XML? (4 个答案) PHP generated XML shows in
有没有人遇到过这个错误或知道如何修复它? “MainStoryboard_iPhone.storyboard”无法打开。第 126 行:PCDATA 无效的 Char 值 3 我不知道这意味着什么,也
我是一名优秀的程序员,十分优秀!