Я хочу читать файлы XHTML, используя SAX или StAX, что бы ни работало лучше всего.Но я не хочу, чтобы сущности были разрешены, заменены или что-то в этом роде.В идеале они должны просто оставаться такими, как есть.Я не хочу использовать DTD.
Вот пример (исполняемый файл с использованием Scala 2.8.x):
import javax.xml.stream._
import javax.xml.stream.events._
import java.io._
println("StAX Test - "+args(0)+"\n")
val factory = XMLInputFactory.newInstance
factory.setProperty(XMLInputFactory.SUPPORT_DTD, false)
factory.setProperty(XMLInputFactory.IS_REPLACING_ENTITY_REFERENCES, false)
println("------")
val xer = factory.createXMLEventReader(new FileReader(args(0)))
val entities = new collection.mutable.ArrayBuffer[String]
while (xer.hasNext) {
val event = xer.nextEvent
if (event.isCharacters) {
print(event.asCharacters.getData)
} else if (event.getEventType == XMLStreamConstants.ENTITY_REFERENCE) {
entities += event.asInstanceOf[EntityReference].getName
}
}
println("------")
println("Entities: " + entities.mkString(", "))
Учитывая следующий файл xhtml ...
<html>
<head>
<title>StAX Test</title>
</head>
<body>
<h1>Hallo StAX</h1>
<p id="html">
<div class="header">
</p>
<p id="stuff">
Überdies sollte das hier auch als Copyright sichtbar sein: ©
</p>
Das war's!
</body>
</html>
... выполнение scala stax-test.scala stax-test.xhtml
приведет к:
StAX Test - stax-test.xhtml
------
StAX Test
Hallo StAX
<div class="header">
berdies sollte das hier auch als Copyright sichtbar sein: ?
Das war's!
------
Entities: Uuml
Таким образом, все объекты были заменены более или менее успешно.Что бы я ожидал и чего я хочу, так это:
StAX Test - stax-test.xhtml
------
StAX Test
Hallo StAX
<div class="header">
Überdies sollte das hier auch als Copyright sichtbar sein: ©
Das war's!
------
Entities: // well, or no entities above and instead:
// Entities: lt, quot, quot, gt, Uuml, #169
Возможно ли это вообще?Я хочу проанализировать XHTML, сделать некоторые изменения и затем снова вывести его как XHTML.Поэтому я действительно хочу, чтобы сущности оставались в результате.
Также я не понимаю, почему Uuml сообщается как событие EntityReference, а остальные нет.