gpt4 book ai didi

c# - 通过使用 LINQ 2 XML 计算某个字符串来生成文件的 xml 属性值?

转载 作者:行者123 更新时间:2023-11-30 21:36:39 24 4
gpt4 key购买 nike

我有一些 XML 文件,其中可能包含节点 <disp-formula id="deqn*">每个节点都有一个名为 \tag 的字符串在里面。现在关键字的数量\tag每个节点可以是一个或多个 <disp-formula id="deqn*"> .

我要生成属性值id从 1 开始,然后每 <disp-formula id="deqn*"> 递增到 +1使用 \tag 找到数数。

示例数据:

<disp-formula id="deqn*">...\tag...</disp-formula>
<disp-formula id="deqn*">...\tag...\tag...\tag ...</disp-formula>
<disp-formula id="deqn*">...\tag ...</disp-formula>
<disp-formula id="deqn*">...\tag...\tag ...</disp-formula>

预期修改:

<disp-formula id="deqn1">...\tag...</disp-formula>
<disp-formula id="deqn2-4">...\tag...\tag...\tag ...</disp-formula>
<disp-formula id="deqn5">...\tag ...</disp-formula>
<disp-formula id="deqn6-7">...\tag...\tag ...</disp-formula>

为了为某个字符串生成数字,我基本上使用以下过程:

string inputText = File.ReadAllText(@"C:\temp\sample.xml");
string findText = @"*";

int matchCount = inputText.Split(findText.ToCharArray()).Length - 1;

if (matchCount > 0)
{
for (int counter = 1; counter <= matchCount; counter++)
{
var regex = new Regex(Regex.Escape(findText));
inputText = regex.Replace(inputText, counter.ToString(), 1);
}
}

但我不知道如何添加 \tag此方法中的计数器或如何使用 LINQ2XML 完成此工作?谁能帮忙?

最佳答案

这样试试;

XDocument doc = XDocument.Load("disp.xml");
var deqns = doc.Descendants("disp-formula");
int countIndex = 1;
foreach (var deqn in deqns)
{
var matchCount = deqn.Value.Select((c, i) => deqn.Value.Substring(i)).Count(sub => sub.StartsWith("\\tag"));
if (matchCount > 0)
{
int lastMatchCount = countIndex + matchCount - 1;
var attribute = string.Format("deqn-{0}", countIndex);
if (lastMatchCount > countIndex)
{
attribute = attribute + "-" + lastMatchCount;
}
deqn.Attribute("id").Value = attribute;
countIndex = lastMatchCount + 1;
}
}
doc.Save("disptarget.xml");

关于c# - 通过使用 LINQ 2 XML 计算某个字符串来生成文件的 xml 属性值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47960814/

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