我有以下xml文件:
<LabelImageCreator xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<PrintFieldList>
<PrintFieldDefinition>
<FieldName>Facility</FieldName>
<DataParameterName>Address</DataParameterName>
<FieldFont>
<FontName>Arial</FontName>
<FontSize>10</FontSize>
<FontStyle>Regular</FontStyle>
</FieldFont>
<CurrentDataValue/>
</PrintFieldDefinition>
<PrintFieldDefinition>
<FieldName>Country</FieldName>
<DataParameterName>CountryofOrigin</DataParameterName>
<WrapField>false</WrapField>
<FieldFont>
<FontName>Arial</FontName>
<FontSize>8</FontSize>
<FontStyle>Regular</FontStyle>
</FieldFont>
<CurrentDataValue/>
<TextPrefix>Produce of </TextPrefix>
</PrintFieldDefinition>
<PrintFieldList>
<LabelImageCreator>
我必须选择字段名称为Facility
的属性,并将地址(例如:No 2546,Gorrge street,California,US)添加到<CurrentDataValue/>
字段并保存。
我尝试使用以下代码,
XmlDocument xmlDocument = new XmlDocument();
xmlDocument.Load(path);
var node = xmlDocument.DocumentElement.SelectSingleNode(
"./PrintFieldList/PrintFieldDefinition[@FieldName='Facility']");
上面的代码虽然在调试它时不起作用。任何人都可以指导我如何选择和更新xml属性。
答案 0 :(得分:1)
一些小问题:
LabelImageCreator
FieldName
是一个元素,而不是一个属性,因此FieldName
而不是@FieldName
如果您要选择父CurrentDataValue
的子元素PrintFieldDefinition
,其子FieldName
的值为Facility
:
var node = xmlDocument.DocumentElement.SelectSingleNode(
"/LabelImageCreator/PrintFieldList/PrintFieldDefinition[FieldName='Facility']/CurrentDataValue");
然后更改值:
node.InnerText = "No 2546, Gorrge street, California, US";
答案 1 :(得分:1)
我会使用 XDocument 而不是 XmlDocument (它允许你使用linq,在我看来,这比使用xpath更容易)。
您可以找到这样的节点,我相信您也可以更新它们(首先搜索并获取值,然后再次搜索并在另一个节点上更新)。
示例:
public class Music : MonoBehaviour
{
public AudioClip[] clips;
private AudioSource audiosource;
public bool randomPlay = false;
private int currentClipIndex = 0;
void Start()
{
audiosource = FindObjectOfType<AudioSource>();
audiosource.loop = false;
}
void Update()
{
if(!audiosource.isPlaying)
{
AudioClip nextClip;
if (randomPlay)
{
nextClip = GetRandomClip();
}
else
{
nextClip = GetNextClip();
}
currentClipIndex = clips.IndexOf(nextClip);
audiosource.clip = nextClip;
audiosource.Play();
}
}
private AudioClip GetRandomClip()
{
return clips[Random.Range(0, clips.Length)];
}
private AudioClip GetNextClip()
{
return clips[(currentClipIndex + 1) % clips.Length)];
}
private void Awake()
{
DontDestroyOnLoad(transform.gameObject);
}
}