gpt4 book ai didi

c# - XML 占据一个元素的位置,下次使用时直接去那里

转载 作者:数据小太阳 更新时间:2023-10-29 02:14:06 25 4
gpt4 key购买 nike

所以我有一个巨大的 XML 文件(维基百科转储 xml)。

我的学校项目要求说我应该能够对这个 xml 文件进行非常快速的搜索(所以不,不要将它导入到 sql 数据库中)

所以我当然想创建一个索引器,它将显示到一个单独的文件(可能是 xml)中,如下所示:[要搜索的内容]:[到包含内容的 xml 节点开头的字节偏移量]

我的问题是如何获取元素的位置,以及如何在需要搜索时跳转到 xml 中的那个位置?

该项目使用 C#。提前谢谢你。

稍后编辑:我正在尝试使用 XmlReader,但我愿意接受任何其他建议。

目前这是我读取非索引搜索的 XML 的方式

XmlReader reader = XmlReader.Create(FileName);

while (reader.Read())
{
switch (reader.Name)
{
case "page":

Boolean found = false;
String title = "";
String element = "<details>";
readMore(reader, "title");
title = reader.Value;

if (title.Contains(word))
{
found = true;
}
readMore(reader, "text");
String content = reader.Value;
if (content.Contains(word) & !found)
{
found = true;
}
if (found)
{
element += "<summary>" + title + " (click)</summary>";
element += content;
element += "</details>";
result.Add(element);
}

break;
}
}
reader.Close();
if (result.Count == 0)
{
result.Add("No results were found");
}
return result;



static void readMore(XmlReader reader, String name)
{
while (reader.Name != name)
{
reader.Read();
}
reader.Read();
}

最佳答案

正确的解决方案是使用中间二进制格式;但是如果你不能这样做,并且假设你使用 DOM,我看不到任何解决方案,只能将节点在 DOM 树中的位置存储为索引列表。

JavaScript 中的示例(在 C# 中应该完全相同):

function getPosition(node) {
var pos = [], i = 0;
while (node != document.documentElement) {
if (node.previousSibling) {
++i;
node = node.previousSibling;
} else {
pos.unshift(i);
i = 0;
node = node.parentNode;
}
}

return pos;
}

function getNode(pos) {
var node = document.documentElement;
for (var i = 0; i < pos.length; ++i) {
node = node.childNodes[pos[i]];
}

return node;
}

关于c# - XML 占据一个元素的位置,下次使用时直接去那里,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13413126/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com