Member 11403304 Ответов: 1

Как мне отобразить телефон в каком-то порядке?


Мой код C# работает не так, как я ожидаю. Это всего лишь отображение факса #
У меня есть xml с телефонными номерами, которые я хочу перебрать в C#, а затем отобразить телефонные номера в следующем порядке.
Домой # Сотового #, # Работа, Факс #
Вот что мне нужно сделать.
1. Если xml-документ содержит несколько телефонных номеров с Phone / @Current= "true", выберите текущую запись, в которой тип = Home (Party\Phone\Type= " HOME")
2. Если нет типа домашнего телефона, то выберите текущую запись, где type = CELL (Party\Phone\Type= " CELL")
3. Если нет типа сотового телефона, то выберите текущую запись, где type = WORK (Party\Phone\Type= " WORK")
4. Если тип рабочего телефона отсутствует, то выберите текущую запись, где type = FAX (Party\Phone\Type= " факс")

XML-документ
<?xml version="1.0" encoding="UTF-8"?>
<Integration> 
	<Party ID="1">
		<Phone>
			<Type Word="WORK">Work</Type>
			<Number>218-222-2222</Number>
		</Phone>
		<Phone Current="true"> 
			<Type Word="FAX">Fax</Type>
			<Number>218-777-7777</Number>
		</Phone>
		<Phone>
			<Type Word="HOME">Home</Type>
			<Number>218-333-3333</Number>
		</Phone>
		<Phone>
			<Type Word="CELL">Cell</Type>
			<Number>218-555-5555</Number>
		</Phone>
		<Phone Current="true">
			<Type Word="CELL">Cell</Type>
			<Number>218-666-6666</Number>
		</Phone>
		<Phone Current="true">
			<Type Word="HOME">Home</Type>
			<Number>218-300-0011</Number>
		</Phone>
		<Phone Current="true">
			<Type Word="WORK">Work</Type>
			<Number>218-111-0000</Number>
		</Phone>
		<Phone> 
			<Type Word="FAX">Fax</Type>
			<Number>218-000-9999</Number>
		</Phone>
</Integration>


Требуемая производительность
<?xml version="1.0" encoding="UTF-8"?>
<Integration> 
	<Party ID="1">
		<Phone Current="true">
			<Type Word="HOME">Home</Type>
			<Number>218-300-0011</Number>
		</Phone>
		<Phone Current="true">
			<Type Word="CELL">Cell</Type>
			<Number>218-666-6666</Number>
		</Phone>
		<Phone Current="true">
			<Type Word="WORK">Work</Type>
			<Number>218-111-0000</Number>
		</Phone>
		<Phone Current="true"> 
			<Type Word="FAX">Fax</Type>
			<Number>218-777-7777</Number>
		</Phone>
</Integration>



Код C#
Boolean blnPhoneFound = false;
            XmlNode objxmlPhoneNode = objxmlBasePartyNode.SelectSingleNode("Phone[@Current='true']");
            if (objxmlPhoneNode != null)
            {
                objCaseParty.Phone = new ConservatorService.Phone();
                if (objxmlPhoneNode.SelectSingleNode("Type").InnerText == "Home")
                {
                    objCaseParty.Phone.Type = ConservatorService.PhoneNumberTypes.Home;
                    blnPhoneFound = true;
                }
                else //Cell
                {
                    if (objxmlPhoneNode.SelectSingleNode("Type").InnerText == "Cell")
                    {
                        objCaseParty.Phone.Type = ConservatorService.PhoneNumberTypes.Cell;
                        blnPhoneFound = true;
                    }
                    else //Work
                    {
                        if (objxmlPhoneNode.SelectSingleNode("Type").InnerText == "Work")
                        {
                            objCaseParty.Phone.Type = ConservatorService.PhoneNumberTypes.Work;
                            blnPhoneFound = true;
                        }

                        else //Fax
                        {
                            if (objxmlPhoneNode.SelectSingleNode("Type").InnerText == "Fax")
                            {
                                objCaseParty.Phone.Type = ConservatorService.PhoneNumberTypes.Fax;
                                blnPhoneFound = true;
                            }

                        } //Fax
                    } //Work
                } // Cell
                if (blnPhoneFound)
                {
                    if (objxmlPhoneNode.SelectSingleNode("Extension") != null)
                    {
                        string strExtension = objxmlPhoneNode.SelectSingleNode("Extension").InnerText;

                        objCaseParty.Phone.Extention = strExtension;
                    }
                    if (objxmlPhoneNode.SelectSingleNode("Number") != null)
                    {
                        string strNumber = objxmlPhoneNode.SelectSingleNode("Number").InnerText;
                        objCaseParty.Phone.Number = strNumber;
                    }
                }

            } //Phone Current 
           
        }

    }
}


Что я уже пробовал:

Boolean blnPhoneFound = false;
            XmlNode objxmlPhoneNode = objxmlBasePartyNode.SelectSingleNode("Phone[@Current='true']");
            if (objxmlPhoneNode != null)
            {
                objCaseParty.Phone = new ConservatorService.Phone();
                if (objxmlPhoneNode.SelectSingleNode("Type").InnerText == "Home")
                {
                    objCaseParty.Phone.Type = ConservatorService.PhoneNumberTypes.Home;
                    blnPhoneFound = true;
                }
                else //Cell
                {
                    if (objxmlPhoneNode.SelectSingleNode("Type").InnerText == "Cell")
                    {
                        objCaseParty.Phone.Type = ConservatorService.PhoneNumberTypes.Cell;
                        blnPhoneFound = true;
                    }
                    else //Work
                    {
                        if (objxmlPhoneNode.SelectSingleNode("Type").InnerText == "Work")
                        {
                            objCaseParty.Phone.Type = ConservatorService.PhoneNumberTypes.Work;
                            blnPhoneFound = true;
                        }

                        else //Fax
                        {
                            if (objxmlPhoneNode.SelectSingleNode("Type").InnerText == "Fax")
                            {
                                objCaseParty.Phone.Type = ConservatorService.PhoneNumberTypes.Fax;
                                blnPhoneFound = true;
                            }

                        } //Fax
                    } //Work
                } // Cell
                if (blnPhoneFound)
                {
                    if (objxmlPhoneNode.SelectSingleNode("Extension") != null)
                    {
                        string strExtension = objxmlPhoneNode.SelectSingleNode("Extension").InnerText;

                        objCaseParty.Phone.Extention = strExtension;
                    }
                    if (objxmlPhoneNode.SelectSingleNode("Number") != null)
                    {
                        string strNumber = objxmlPhoneNode.SelectSingleNode("Number").InnerText;
                        objCaseParty.Phone.Number = strNumber;
                    }
                }

            } //Phone Current 
           
        }

    }
}

ZurdoDev

Это очень, очень легко исправить. Поставьте точку останова в своем коде, а затем шагайте через каждую строку и наблюдайте, что происходит. Вы очень быстро найдете проблему.

Мы не можем запустить ваш код, поэтому вам нужно сделать это.

Member 11403304

Когда я отлаживаю свой код, кажется, что код возвращает номер факса, потому что именно его он находит первым в моем xml-документе. Однако, несмотря на то, что этот номер факса имеет текущий номер, я хочу сначала отобразить домашний телефон перед номером факса. Я не знаю, как это сделать. Порядок в xml-документе-это не то, как я хочу, чтобы числа отображались.

1 Ответов

Рейтинг:
0

#realJSOP

Я бы де-сериализовал xml-данные в соответствующую модель, а затем использовал LINQ, чтобы найти то дерьмо, которое я хочу в модели, вместо того чтобы возиться с разбором xml на лету. Но это только я.


Member 11403304

Порядок, в котором элементы телефона появляются в xml-файле, не имеет значения. Важно то, что независимо от того, где находится элемент типа телефона Home в xml, это номер, который я хочу отобразить, если он не существует, и в этом случае я буду отображать ячейку, а если она не существует, то отображать работу, а если она не существует, то отображать факс в качестве последнего варианта.
Мой код отображает только первый элемент типа телефона, который имеет phone/@Current= 'true', который в моем xml - файле является факсом. Я не хочу отображать номер факса, потому что есть домашний номер
Как мне логически выбрать все узлы с текущим значением true и отсортировать эти элементы по типу (выбор первого из них-это все, что мне нужно). Это звучит просто, но я не знаю, как и что изменить в моем коде. Таким образом, я хочу отображать только домашний номер типа телефона, если он найден, даже если есть другие типы телефонов. Если тип телефона домашний не найден, то я хочу отобразить номер сотового типа телефона, если не найден, то я хочу отобразить рабочий номер типа телефона, а если все вышеперечисленное не найдено, то я хочу отобразить номер факса типа телефона.
Результат, который я ожидаю, должен быть
< телефон>
< номер & gt;218-300-0011>
< type & gt;Home