Мое веб-приложение принимает в качестве входных данных локальные XML-файлы и сохраняет их в переменной useState. Я хотел бы проанализировать входные данные XML, но в настоящее время я не могу это сделать. Вот как получаются XML-файлы:
const [xml, setXML] = useState(null)
function handleUpload(event) {
setXML(event.target.files[0])
console.info(xml)
}
return (
...
<input type='file' accept = "text/xml" onChange = {handleUpload} />
...
);
Вот что возвращает console.info:
File { name: "filename.xml", lastModified: 1717088034013, webkitRelativePath: "", size: 44452, type: "text/xml" }
Если я разверну его, я не увижу фактические данные XML, и поэтому я думаю, что это неправильный способ получения локального файла XML. Я видел предложение использовать выборку, но мне кажется странным, что это потребуется для получения локального XML-файла.
Я все равно попробовал проанализировать переменную xml с помощью библиотеки xml2js. Я последовал этому ответу, чтобы написать следующий код. console.info возвращает неопределенное значение
const [xml, setXML] = useState(null)
const [xmlData, setXMLData] = useState(null)
useEffect(() => {
var parseString = require('xml2js').parseString;
parseString(xml, function (err, result) {
setXMLData(result);
console.info(result)
});
}, [xml])
@ChukwujiobiCanon Да, именно. Я хотел бы иметь переменную, хранящую содержимое XML-файла. Эта переменная должна позволить мне анализировать XML



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Чтобы прочитать File в Javascript, вы должны использовать FileReader. FileReader позволяет веб-приложениям асинхронно читать содержимое File (или буферов необработанных данных), хранящихся на компьютере пользователя.
const reader = new FileReader()
if (xml)
{
reader.readAsText(xml)
}Вам следует добавить прослушиватель событий, чтобы знать, когда чтение завершено.
reader.addEventListener("load", () => console.info(reader.result))После прочтения reader.result будет содержать содержимое File.
Если File содержит двоичные данные, сделайте следующее:
const reader = new FileReader()
if (binaryFile)
{
reader.readAsArrayBuffer(binaryFile)
}Примечание. FileReader нельзя использовать для чтения File пользователем "pathname" из файловой системы пользователя. [1]
[1] This is a security feature.
Отлично, это работает! Затем я могу использовать read.result в качестве входных данных для метода parseString в xml2js. Я собираюсь попробовать и посмотреть, смогу ли я заставить его работать с DOMParser.
Я так понимаю, вам нужен контент, а не
File.