2011-12-28 10 views
2

私はClientDataSetに保存するWebサービスからXMLを持っています。 XMLマッパー... XE2

( を使用して「作成とテストの変容」の場合)データがグリッドに表示されていないXMLマッパーを使用して、私は 変換ファイルを使用することはできませんよ

...ここ

がありますC#Webサービス(データの1行目)からの応答XMLのいくつかは...

<?xml version="1.0" encoding="UTF-8"?> 
<soap:Envelope xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:soap="http://www.w3.org/2003/05/soap-envelope"> 
<soap:Body> 
<AllResponse xmlns="http://some.url.com/"> 
<AllResult> 
<xs:schema xmlns="" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:xs="http://www.w3.org/2001/XMLSchema" id="NewDataSet"> 
<xs:element msdata:UseCurrentLocale="true" msdata:IsDataSet="true" name="NewDataSet"> 
<xs:complexType> 
<xs:choice maxOccurs="unbounded" minOccurs="0"> 
<xs:element name="Table"> 
<xs:complexType> 
<xs:sequence> 
<xs:element name="Id" minOccurs="0" type="xs:string"/> 
<xs:element name="UserName" minOccurs="0" type="xs:string"/> 
<xs:element name="Name" minOccurs="0" type="xs:string"/> 
<xs:element name="PhoneInt" minOccurs="0" type="xs:string"/> 
<xs:element name="CostCentre" minOccurs="0" type="xs:int"/> 
<xs:element name="GroupRoleNameDK" minOccurs="0" type="xs:string"/> 
<xs:element name="GroupRoleNameUK" minOccurs="0" type="xs:string"/> 
<xs:element name="Email" minOccurs="0" type="xs:string"/> 
<xs:element name="Url" minOccurs="0" type="xs:string"/> 
<xs:element name="PhoneAlt" minOccurs="0" type="xs:string"/> 
<xs:element name="PhoneMobile" minOccurs="0" type="xs:string"/> 
<xs:element name="Fax" minOccurs="0" type="xs:string"/> 
<xs:element name="EducationNameDK" minOccurs="0" type="xs:string"/> 
<xs:element name="EducationNameUK" minOccurs="0" type="xs:string"/> 
<xs:element name="Location" minOccurs="0" type="xs:string"/> 
<xs:element name="PhoneNote" minOccurs="0" type="xs:string"/> 
<xs:element name="Personid" minOccurs="0" type="xs:int"/> 
<xs:element name="GroupId" minOccurs="0" type="xs:int"/> 
<xs:element name="GroupNameDK" minOccurs="0" type="xs:string"/> 
<xs:element name="GroupNameUK" minOccurs="0" type="xs:string"/> 
</xs:sequence> 
</xs:complexType> 
</xs:element> 
</xs:choice> 
</xs:complexType> 
</xs:element> 
</xs:schema> 
<diffgr:diffgram xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1"> 
<NewDataSet xmlns=""> 
<Table diffgr:id="Table1" msdata:rowOrder="0"> 
<Id>P-4</Id> 
<UserName>auser</UserName> 
<Name>Somename</Name> 
<PhoneInt>aPhone</PhoneInt> 
<CostCentre>0</CostCentre> 
<GroupRoleNameDK>WebService</GroupRoleNameDK> 
<GroupRoleNameUK>WebService</GroupRoleNameUK> 
<Email>[email protected]</Email> 
<Url>http://www.embarcadero.com</Url> 
<PhoneMobile>12345678</PhoneMobile> 
<Fax>87654321</Fax> 
<Personid>4</Personid> 
<GroupId>618</GroupId> 
<GroupNameDK>Danish Group</GroupNameDK> 
<GroupNameUK>GroupName</GroupNameUK> 
</Table> 
</NewDataSet> 
</diffgr:diffgram> 
</AllResult> 
</AllResponse> 
</soap:Body> 
</soap:Envelope> 

スキーマが明確に定義されているように見えるので、私はそれ が動作しない理由を少し、困惑です。 私はいくつかのフィールドが<フィールド/ >代わり <場の持っていることに気づいた> < /フィールド>たときにフィールドが空である - それが重要な場合は...

私は仲良くどのように任意のアイデアを知りません?

-Kurt

答えて

0

にフィード電子.XTRファイルの非常に最初の行 参照ディーパックの記事http://www.agnisoft.com/white_papers/soap1.asp

引用: "の最初の要素で:

この理由は、DelphiのXMLは、「石鹸」のようなプロバイダーんではない を変革ということですfrom "属性(および"ソース "内のすべてのそのような名前空間 )。それはいくつか 更新パックで修正される可能性がありますので、この点は、返信用

これは、Delphi XE2で固定されていません...

-Kurt

0

応答は二つの部分、ちょうどXSD文書のようなXMLスキーマ定義、およびデータの一部が含まれています。

XE2でウィザードをXMLデータバインディングは、この形式を好きではない場合、私は

  • (1回)スキーマの一部を抽出して、ウィザード

  • によって処理することができ、それからXSDを作成します
  • 答えは私は番目を変更するために必要なことであった(すべての応答のための)XML文書からデータ部分を抽出し、変換コンポーネント

+0

おかげで適用されない場合があります!任意のスマートな方法を抽出するには? –

+0

@ Kurtデータ部分を抽出するには、XMLをIXmlDocumentに読み込みます。次に、(そのサブノードを持つ)Table要素をIXmlNodeにロードし、それを2番目(空の)IXmlDocumentに追加します。 – mjn