Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 正确使用xml中的自定义id代码,以便导入和重写c语言#_C#_Xml - Fatal编程技术网

C# 正确使用xml中的自定义id代码,以便导入和重写c语言#

C# 正确使用xml中的自定义id代码,以便导入和重写c语言#,c#,xml,C#,Xml,我是一名刚刚学习xml和c的学生。我正在编写一个程序,它将读入xml数据,对其进行处理,然后将其写回xml。相当标准的东西。具体来说,该程序将允许用户根据我的一位朋友的请求,为L5R tapletop RPG游戏创建/生成角色并添加新类型的信息(部落、技能、奖金等)。这是一次学习经历,当我完成时,它会给我一些东西放在我的投资组合中 我首先创建xsd和xml,完成后将通过伪代码阶段 在我的XML中,我正在做一些类似于 <clan clID="clanX"> <clName&g

我是一名刚刚学习xml和c的学生。我正在编写一个程序,它将读入xml数据,对其进行处理,然后将其写回xml。相当标准的东西。具体来说,该程序将允许用户根据我的一位朋友的请求,为L5R tapletop RPG游戏创建/生成角色并添加新类型的信息(部落、技能、奖金等)。这是一次学习经历,当我完成时,它会给我一些东西放在我的投资组合中

我首先创建xsd和xml,完成后将通过伪代码阶段

在我的XML中,我正在做一些类似于

<clan clID="clanX">
  <clName>...</clname>
  <bonus bnID="clXbonusX>
    <bnName>...</bnName>
    <modBy>someNum</modBy>
  </bonus>
</clan>

...

在ID中插入具有实际数据的元素名称似乎是多余的。。您已经知道
clan
元素中的
clID
是用于
clan
元素的,所以只需将您的
X
而不是整个
clanX
bnID
元素也是如此

这样,您甚至可以通过从“ID”提取实际信息(
X
)来保存

一旦我开始实际编程,ID字符串将根据用户输入的新氏族和奖金名称等而改变

可以更改的ID不是真正的ID。从您对Shekhar_Pro的回答的评论来看,您的想法似乎是ID在XML文档的范围内必须是唯一的。当且仅当您在DTD或模式中使用ID约束时,这是正确的。ID约束并不是一个非常常见的用例,我不认为这是一个

更大的问题是:你真的需要身份证吗?例如,假设氏族的名称和特征不会随着时间的推移而改变-可能会添加新的,但AEG不会很快改变旧的-如果您的文档如下所示:

<clan name="Scorpion">
   <bonus trait="Honor" value="-1"/>
   <bonus trait="Intelligence" value="+1"/>
</clan>
在您的模式中,您可以使用以下命令指示族名称需要唯一:

<xsd:element name="clan" type="clanType">
  <xsd:unique name="nameKey">
    <xsd:selector xpath="*/clan"/>
    <xsd:field xpath="@name"/>
  </xsd:unique>
</xsd:element>


您可能需要在选择器中使用XPath,这取决于
clan
元素在文档中的位置。

我的理解是,我不能让ID相同,因为如果clan ID的ID“1”已经存在,那么子元素中的额外ID为“1”在按自定义ID搜索元素时会导致冲突吗?很好,这看起来更简洁、更高效(你对L5R的了解给我留下了深刻的印象^。^)我不知道xpath是什么,但我有一种感觉,当涉及到*/和//clam时,我也将开始学习lol[@…那是目录符号吗?这是我一直想知道的事情,但我记不起来/找不到一个如何在不使用整个c:\\blahblah\blah的情况下为路径编程的列表(我不记得正确的术语,所以谷歌是个婊子)我查阅了更多信息,我不确定我是否会使用xpath,因为在我的程序中,我将使用Linq to xml,那么我还会在模式中使用xpath条目吗?此外,您使用了type=“clanType”,我不确定确切地如何声明类型(到目前为止,我的模式非常基本)我对上面的内容有点困惑,clan是否需要是一个复杂类型,或者我是否应该将其放在/unique之后?我了解了发生的事情的要点,使用属性而不是元素作为值,但是对于如何确保它们是唯一的,我仍然有点困惑。您可以将XPath与Linq结合使用;您也可以执行同样的操作使用纯Linq方法,例如
doc.substands(“clan”).Where(x=>x.GetAttribute(“name”)==“Scorpion”).FirstOrDefault()
将返回该
clan
元素,如果该名称的元素不存在,则返回null。是的,您需要将
clanType
声明为复杂类型-这就是您指示
clan
有一个或多个
奖金
子元素的方式。最后,您可能会感兴趣:
<xsd:element name="clan" type="clanType">
  <xsd:unique name="nameKey">
    <xsd:selector xpath="*/clan"/>
    <xsd:field xpath="@name"/>
  </xsd:unique>
</xsd:element>