Я хочу сортировать узлы с именем ImageInfo по числу в pos-узле, потому что у меня есть кнопки, которые меняют положение вверх или вниз, и мне нужно отсортировать узел ImageInfo в правильный порядок, когда pos изменился.XmlDocument сортирует узлы по внутреннему текстовому значению для ребенка
Прошу прощения за отсутствие кода C#, но я заверяю вас, что я пробовал так много разных вещей, и им нужна помощь.
вот мой XML:
<?xml version="1.0" encoding="utf-8"?>
<MplAndSiImages xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<MplImages>
<ImageInfo>
<pos>1</pos>
<Name>1.png</Name>
<ParentObjectId>b66a23a8-6268-e611-80e2-c4346bad02e8</ParentObjectId>
<Url>http://localhost:8080/b66a23a8-6268-e611-80e2-c4346bad02e8/1.png</Url>
</ImageInfo>
<ImageInfo>
<pos>2</pos>
<Name>2.png</Name>
<ParentObjectId>b66a23a8-6268-e611-80e2-c4346bad02e8</ParentObjectId>
<Url>http://localhost:8080/b66a23a8-6268-e611-80e2-c4346bad02e8/2.png</Url>
</ImageInfo>
<ImageInfo>
<pos>3</pos>
<Name>3.png</Name>
<ParentObjectId>b66a23a8-6268-e611-80e2-c4346bad02e8</ParentObjectId>
<Url>http://localhost:8080/b66a23a8-6268-e611-80e2-c4346bad02e8/3.png</Url>
</ImageInfo>
</MplImages>
<SiImages />
</MplAndSiImages>
вот мой C# код:
он вызывается нажатием на кнопку ссылки действий и мне это нужно изменить poition 1 меньше двигаться это в списке, и у меня есть изменение числа, но нужно, чтобы xml нужно было отсортировать, чтобы он имел узлы ImageInfo в правильном порядке.
public ActionResult MoveUp(string name, string id)
{
var pathConfig = WebConfigurationManager.AppSettings["ProductImageFolderPath"];
var url = pathConfig + id + "\\" + "ModelConfig.xml";
XmlDocument doc = new XmlDocument();
doc.Load(url);
XmlNode root = doc.DocumentElement;
XmlNode upNode = root.SelectSingleNode("/MplAndSiImages/MplImages/ImageInfo[Name/text() = '" + name + "']/pos");
string upNodeValue = upNode.InnerText;
int upNodeInt = Int32.Parse(upNodeValue);
upNodeInt = upNodeInt - 1;
var upNodeString = upNodeInt.ToString();
upNode.InnerText = upNodeString;
XmlNode downNode = root.SelectSingleNode("/MplAndSiImages/MplImages/ImageInfo/pos[text() = '" + upNodeString + "']");
string downNodeValue = downNode.InnerText;
int downNodeInt = Int32.Parse(downNodeValue);
downNodeInt = downNodeInt + 1;
var downNodeString = downNodeInt.ToString();
downNode.InnerText = downNodeString;
Func<string, int> ParseIntOrDefault = (string input) =>
{
int output;
int.TryParse(input, out output);
return output;
};
var result = doc.SelectNodes("MplAndSiImages/MplImages/*")
.Cast<XmlNode>()
.OrderBy(element => element.SelectSingleNode("pos").InnerText)
.ToList();
doc.Save(url);
return RedirectToAction("UploadAnImage", new { id = id });
}
Я видел это и пробовал, но есть ли способ сделать это с помощью XmlDocument:
XElement root = XElement.Load(xmlfile);
var orderedtabs = root.Elements("Tab")
.OrderBy(xtab => (int)xtab.Element("Order"))
.ToArray();
root.RemoveAll();
foreach(XElement tab in orderedtabs)
root.Add(tab);
root.Save(xmlfile);
Я упорядочивания изображений для отображения на веб-странице. , и когда нажата кнопка перемещения вверх, изображение будет перемещено вверх в списке и поменяется местами с изображением над ним.
Кажется, что у вас нет кода, и мы напишем все для вас. Этот сайт не является услугой кодирования. Вы должны потратить некоторое усилие и попробовать несколько вещей свой собственный –
жаль, что я сделал много вещей, которые я просто не могу найти что-нибудь, что подходит мне (все отсортировано по атрибуту) извините, я не сказал этого, но я искал часы и им довольно новый для всего, что связано с xml. –
@Purecrafttube - пожалуйста, объясните, чего вы пытаетесь достичь? Заказ изображений с какой целью? –