我有一个外部 XML 文件和一个 XSD 文件。 要处理这些文件,我必须修改它们。 (字符集、命名空间等...) 这时问题就出现了。
class XMLDataModifier(pathToXsd: String) {
// Pattern for XML
private val xsiPatternXML = Regex("schemaLocation=\".*\"")
private val noNamespacelocation = "noNamespaceSchemaLocation=\"${pathToXsd}\""
// Pattern for XSD
private val targetNamespacePatternXSD = Regex("targetNamespace=\".*\"")
// Pattern for XML and XSD
private val encoding = Regex("encoding=\".*\"")
private val xmlnsPattern = Regex("xmlns=\".*\"")
fun modifyFile(file: XmlFile): XmlFile {
val utf8 = Charsets.UTF_8
val fileInputAsBytes = file.readBytes()
var fileInput = String(fileInputAsBytes, utf8)
println("### inside modifier - FirstCheck ###")
println(fileInput)
fileInput = fileInput.replace(encoding, "encoding=\"UTF-8\"")
fileInput = fileInput.replace(xsiPatternXML, noNamespacelocation)
fileInput = fileInput.replace(xmlnsPattern, "")
println("### inside modifier - SecondCheck ###")
println(fileInput)
return XmlFile(fileInput)
}
如果我尝试我的功能,就会进行替换。 但打印语句显示一个不可读的字符串。 我认为问题存在是因为字符集没有改变。
Xml 文件(test.xml):
<?xml version="1.0" encoding="ISO-8859-15"?>
<BeherbergungsVerzeichnis
xmlns="http://xml.inek.org/schema/Standortverzeichnis"
xsi:schemaLocation="http://xml.inek.org/schema/Standortverzeichnis"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>
<Id>11</Id>
<Vorname>Günther</Vorname>
<Nachname>Hartmannsgruber</Nachname>
</Beherbergungsverzeichnis>
运行函数后的输出
### inside modifier FirstCheck ###
<?xml version="1.0" encoding="ISO-8859-15"?>
<BeherbergungsVerzeichnis
xmlns="http://xml.inek.org/schema/Standortverzeichnis"
xsi:schemaLocation="http://xml.inek.org/schema/Standortverzeichnis"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>
<Id>11</Id>
<Vorname>G�nther</Vorname>
<Nachname>Hartmannsgruber</Nachname>
</Beherbergungsverzeichnis>
### inside modifier SecondCheck ###
<?xml version="1.0" encoding="UTF-8"?>
<BeherbergungsVerzeichnis
xsi:noNamespaceSchemaLocation="/home/user/IdeaProjects/StandortKonverterGradle/src/main/resources/data/testxsd.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>
<Id>11</Id>
<Vorname>G�nther</Vorname>
<Nachname>Hartmannsgruber</Nachname>
</Beherbergungsverzeichnis>
Fehler beim Validieren der XML-Datei: /home/benhartmannsgruber/IdeaProjects/StandortKonverterGradle/<?xml version="1.0" encoding="UTF-8"?>
虽然字符集设置为UTF-8,为什么“ü”出现错误的字符? 有没有更好的解决方案来读取和处理不需要保存的文件?
感谢您的帮助!
如果您需要在解析 XML 文件之前在词法级别修改它们,那么您的应用程序架构就存在严重错误。一般来说,您应该只使用基于 XML 的工具(例如 XSLT 和 XQuery)来读取和写入 XML 文件。
尝试更改 XML 声明中“encoding”属性的值将会失败,除非您也相应地更改文件内容的实际编码。看来您将其设置为与实际文件编码不匹配的值。