Próbuję przejść z SQL do XML, ale muszę to poprawnie sformatować, inaczej to nie zadziała. Używam C # do wstawiania mojego sql między QBXML
select employee_name as Name ,'OCI Associates' as [CompanyName],'Mr' as Salutation ,
LEFT(employee_name,CHARINDEX(' ',employee_name + ' ')-1) as FirstName, REVERSE(LEFT(REVERSE(employee_name),
CHARINDEX(' ',REVERSE(employee_name))- 1)) AS LastName
from EMPLOYEELIST
for xml raw('CustomerAdd') , ROOT('CustomerAddRq'), ELEMENTS
Oto, co dostaję
<CustomerAdd>
<Name>Zohreh FAKELASTNAME</Name>
<Salutation>Mr</Salutation>
<FirstName>Zohreh</FirstName>
<LastName>FAKELASTNAME</LastName>
</CustomerAdd>
<CustomerAdd>
<Name>Phillip FAKELASTNAME</Name>
<Salutation>Mr</Salutation>
<FirstName>Phillip</FirstName>
<LastName>FAKELASTNAME</LastName>
</CustomerAdd>
To jest to, czego potrzebuję
'' '
<CustomerAddRq>
<CustomerAdd>
<Name>Zohreh FAKELASTNAME</Name>
<Salutation>Mr</Salutation>
<FirstName>Zohreh</FirstName>
<LastName>FAKELASTNAME</LastName>
</CustomerAdd>
</CustomerAddRq>
<CustomerAddRq>
<CustomerAdd>
<Name>Phillip FAKELASTNAME</Name>
<Salutation>Mr</Salutation>
<FirstName>Phillip</FirstName>
<LastName>FAKELASTNAME</LastName>
</CustomerAdd>
'' '
Nie wiem, jak dodać „CustomerAddRq” do każdego „CustomerAdd”
2 odpowiedzi
Wypróbuj xml linq. Wziąłem tablicę ciągów elementów, które, jak zakładam, pochodziły z bazy danych, a następnie dodałem do węzła głównego.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
string[] xmlArray = {
"<CustomerAdd>" +
"<Name>Zohreh FAKELASTNAME</Name>" +
"<Salutation>Mr</Salutation>" +
"<FirstName>Zohreh</FirstName>" +
"<LastName>FAKELASTNAME</LastName>" +
"</CustomerAdd>",
"<CustomerAdd>" +
"<Name>Phillip FAKELASTNAME</Name>" +
"<Salutation>Mr</Salutation>" +
"<FirstName>Phillip</FirstName>" +
"<LastName>FAKELASTNAME</LastName>" +
"</CustomerAdd>"
};
XElement customerAddRq = new XElement("CustomerAddRq");
customerAddRq.Add(xmlArray.Select(x => XElement.Parse(x)));
}
}
}
Proszę - w przypadku następnego pytania - zawsze oznaczaj swoim aktualnym RDBMS (dostawcą i wersją). Oznaczyłeś tagiem [sql]
, co nie wystarczy...
Z twojego kodu zakładam, że to jest SQL Server.
Możesz spróbować tego:
Utwórz tablicę makiety, aby zasymulować swój problem (zrób to sam następnym razem)
DECLARE @fakeTable TABLE(employee_name VARCHAR(100), salutation VARCHAR(50));
INSERT INTO @fakeTable VALUES
('Zohreh FAKELASTNAME','Mr')
,('One MORE','Ms')
--Twoje własne zapytanie, nieznacznie zmienione
select employee_name as [CustomerAdd/Name]
,'OCI Associates' as [CustomerAdd/CompanyName]
, salutation as [CustomerAdd/Salutation]
, LEFT(employee_name,CHARINDEX(' ',employee_name + ' ')-1) as [CustomerAdd/FirstName]
, REVERSE(LEFT(REVERSE(employee_name),CHARINDEX(' ',REVERSE(employee_name))- 1)) AS [CustomerAdd/LastName]
from @fakeTable EMPLOYEELIST
for xml PATH('CustomerAddRq');
Pomysł w skrócie:
Używam trybu PATH
. Pozwala to na wyrażenie XPath w aliasie kolumny.
ROOT
będzie najbardziej zewnętrznym elementem, pojawiającym się tylko raz. Nazwa po PATH('ThisName')
pojawi się wokół każdego wiersza.
Teraz nadchodzi magia:
- Wyszukiwarka otwiera tag wiersza i znajduje element jako
[CustomerAdd/Name]
. - Zapisze tag otwierający
<CustomerAdd>
, a następnie tag otwierający<Name>
. - W tym elemencie zapisze zawartość jako węzeł
text()
. - Teraz silnik znajduje
<CustomerAdd/CompanyName>
. - Silnik zamknie się
<Name>
, ale – nadal w ciągu<CustomerAdd>
– będzie kontynuowany tutaj i otworzy<CompanyName>
- ...i tak dalej...
Podobne pytania
Nowe pytania
c#
C # (wymawiane „patrz ostro”) jest językiem programowania wysokiego poziomu, statycznie typowanym, wieloparadygmatowym opracowanym przez firmę Microsoft. Kod C # zwykle jest przeznaczony dla rodziny narzędzi Microsoft .NET i czasów wykonywania, do których należą między innymi .NET Framework, .NET Core i Xamarin. Użyj tego tagu w przypadku pytań dotyczących kodu napisanego w C # lub C # formalnej specyfikacji.