我有一个XML文件,声明它使用的是utf-8。 当我在VIM中打开文件时,我看到类似
的内容class EventsController < ApplicationController
...
def create
@tutor = current_tutor
@event = @tutor.events.build(event_params)
respond_to do |format|
if @event.save
format.html { redirect_to @event, notice: 'Event was successfully created.' }
format.json { render :show, status: :created, location: @event }
else
format.html { render :new }
format.json { render json: @event.errors, status: :unprocessable_entity }
end
end
end
...
def event_params
params[:start_time] = params[:start]
params[:end_time] = params[:end]
params.permit(:title, :description, :start_time, :end_time, :url, :type)
end
end
我正在使用Java 1.6.0_41的SAXParser并且在使用这些数据时,解析器基本上没有看到格式错误的文字并跳过它们或似乎将格式错误的字符视为&# 34;内容&#34; <?xml version="1.0" encoding="UTF-8"?>
<r>
<first-tag>foo</first-tag>
<second-tag>
<a-tag-nested-in-second-tag>some data</a-tag-nested-in-second-tag>
</second-tag>
...
</r>
的数据。
以下是我如何使用数据
second-tag
SAX是否有办法将嵌套的转义XML数据视为真正的XML标记而不仅仅是File f = ...
SAXParser parser = SAXParserFactory.newInstance().newSAXParser();
stream = new FileInputStream(f);
AbstractHandler handler = ...
parser.parse(new InputSource(stream), handler);
的数据?
答案 0 :(得分:1)
UTF-8是character encoding。在单个文件中使用多个字符编码是没有意义的,也不会显示任何具有多个字符编码的证据。
您展示的内容包括多个 字符实体引用 ,例如<
和>
。这些不是问题,尽管它们可能表明(有意或无意)转义 XML标记的输出。
的问题在于,您的“XML”缺少单个根元素,因此不是well-formed。
如果您为标记提供单个根元素,
<?xml version="1.0" encoding="UTF-8"?>
<r>
<first-tag>foo</first-tag>
<second-tag>
<a-tag-nested-in-second-tag>some data</a-tag-nested-in-second-tag>
</second-tag>
</r>
XML解析器可以很好地解析它。
SAX是否有办法真正处理嵌套的转义xml数据 xml标记而不仅仅是“second-tag”的数据?
不,没有一个简单的配置标志可以指示SAX将转义的XML视为常规XML。 SAX将正确地将转义的XML数据视为字符和字符实体引用。您的选择包括通过
解决上游问题请注意,选项#2本身可能涉及一个基于SAX的解析器,它的实体处理程序是您为重建原始XML而设计的。