Генерация XML через сериализацию XML и атрибут c # путают - PullRequest
1 голос
/ 03 мая 2011

вот мой xml

<?xml version="1.0" encoding="windows-1252"?>
<OpenShipments xmlns="x-schema:C:\UPSLabel\OpenShipments.xdr">
    <OpenShipment ShipmentOption="" ProcessStatus="">
        <ShipTo>
            <CompanyOrName>DARMOT Sp. z o.o</CompanyOrName>
            <Attention>DARMOT Sp. z o.o</Attention>
            <Address1>Ojca Damiana Tynieckiego 46</Address1>
            <Address2></Address2>
            <Address3>DarÂ3owo</Address3>
            <CountryTerritory>PL</CountryTerritory>
            <PostalCode>76-150</PostalCode>
            <CityOrTown>DarÂ3owo</CityOrTown>
            <StateProvinceCounty></StateProvinceCounty>
            <Telephone>943143185</Telephone>
        </ShipTo>
        <ShipmentInformation>
            <ServiceType>UPS Standard</ServiceType>
            <NumberOfPackages>1</NumberOfPackages>
            <DescriptionOfGoods>Remanufactured auto parts</DescriptionOfGoods>
            <BillingOption>PP</BillingOption>
        </ShipmentInformation>
        <Package>
            <PackageType>CP</PackageType>
            <Weight>1</Weight>
            <Reference1>OUR:AWP0021</Reference1>
            <Reference2>Job # 41149</Reference2>
            <DeclaredValue>
                <Amount>999</Amount>
            </DeclaredValue>
        </Package>
    </OpenShipment>
</OpenShipments>

, который мне нужно сгенерировать из моего класса через сериализацию xml в c #.поэтому, пожалуйста, объясните мне, как написать структуру классов для получения вышеупомянутого xml.

, если присмотреться к моему xml, то есть несколько тегов с атрибутом.вот оно ...

<OpenShipments xmlns="x-schema:C:\UPSLabel\OpenShipments.xdr">

так, как написать свойство, которое будет иметь атрибут, подобный указанному выше ShipmentOption = "" ProcessStatus = "", а также, пожалуйста, скажите мне, как генерировать xmlnsнапример, xmlns = "x-schema: C: \ UPSLabel \ OpenShipments.xdr" с тегом OpenShipments.здесь я не знаю, как справиться с этой ситуацией, и путь в XML не является фиксированным ... C: \ UPSLabel \ OpenShipments.xdr.это будет отличаться в зависимости от состояния.поэтому, пожалуйста, объясните мне, как написать класс для вышеупомянутого xml подробноспасибо

Ответы [ 2 ]

1 голос
/ 03 мая 2011

Откройте командную строку Visual Studio. Затем используйте инструмент xsd.exe , чтобы выполнить эту работу за вас:

C:\work>xsd.exe test.xml
Microsoft (R) Xml Schemas/DataTypes support utility
[Microsoft (R) .NET Framework, Version 4.0.30319.1]
Copyright (C) Microsoft Corporation. All rights reserved.
Writing file 'C:\work\test.xsd'.

C:\work>xsd.exe /classes test.xsd
Microsoft (R) Xml Schemas/DataTypes support utility
[Microsoft (R) .NET Framework, Version 4.0.30319.1]
Copyright (C) Microsoft Corporation. All rights reserved.
Writing file 'C:\work\test.cs'.

где test.xml - файл, который вы показали в своем сообщении. Как вы можете видеть, это генерирует test.cs, который будет содержать класс, который вы можете использовать для десериализации этого XML:

using (var reader = XmlReader.Create("test.xml"))
{
    var serializer = new XmlSerializer(typeof(OpenShipments));
    var openShipments = (OpenShipments)serializer.Deserialize(reader);
    // TODO: do something with those shipments like for example shipping them :-)
}
0 голосов
/ 03 мая 2011

Вы можете использовать класс XElement (System.Xml.Linq). Пример:

XElement element = new XElement("OpenShipments");
XAttribute attribute = new XAttribute("xmlns", @"x-schema:C:\UPSLabel\OpenShipments.xdr");
element.Add(attribute);

Если путь не зафиксирован, вы можете сделать что-то вроде этого:

string path = "C:\..."; // get your path here
XAttribute attribute = new XAttribute("xmlns", @"x-schema:" + path);
...