J'ai un document XML que je génère à partir d'un objet Entity Framework. Le XML généré ressemble à ceci:Problèmes de transformation d'EntityObject XML avec XSLT
Republiée XML COMPLET
<Task z:Id="i1" xmlns="http://schemas.datacontract.org/2004/07/MCC.DAL" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"
xmlns:z="http://schemas.microsoft.com/2003/10/Serialization/">
<EntityKey z:Id="i2" xmlns="http://schemas.datacontract.org/2004/07/System.Data.Objects.DataClasses"
xmlns:a="http://schemas.datacontract.org/2004/07/System.Data">
<a:EntityContainerName>Editorial_MasterEntities</a:EntityContainerName>
<a:EntityKeyValues>
<a:EntityKeyMember>
<a:Key>TaskID</a:Key>
<a:Value i:type="b:int" xmlns:b="http://www.w3.org/2001/XMLSchema">1670</a:Value>
</a:EntityKeyMember>
</a:EntityKeyValues>
<a:EntitySetName>Task</a:EntitySetName>
</EntityKey>
<FormCOIAns i:nil="true" />
<FormCOIAnsReference xmlns:a="http://schemas.datacontract.org/2004/07/System.Data.Objects.DataClasses">
<a:EntityKey i:nil="true" xmlns:b="http://schemas.datacontract.org/2004/07/System.Data" />
</FormCOIAnsReference>
<FormCrownLicAns z:Id="i3">
<EntityKey z:Id="i4" xmlns="http://schemas.datacontract.org/2004/07/System.Data.Objects.DataClasses" xmlns:a="http://schemas.datacontract.org/2004/07/System.Data">
<a:EntityContainerName>Editorial_MasterEntities</a:EntityContainerName>
<a:EntityKeyValues>
<a:EntityKeyMember>
<a:Key>TaskID</a:Key>
<a:Value i:type="b:int" xmlns:b="http://www.w3.org/2001/XMLSchema">1670</a:Value>
</a:EntityKeyMember>
</a:EntityKeyValues>
<a:EntitySetName>FormCrownLicAns</a:EntitySetName>
</EntityKey>
<CrownAgreement>1</CrownAgreement>
<GovernmentAgency>ASDSADSADSADSA</GovernmentAgency>
<Task z:Ref="i1" />
<TaskID>1670</TaskID>
<TaskReference xmlns:a="http://schemas.datacontract.org/2004/07/System.Data.Objects.DataClasses">
<a:EntityKey z:Ref="i2" xmlns:b="http://schemas.datacontract.org/2004/07/System.Data" />
</TaskReference>
</FormCrownLicAns>
<FormCrownLicAnsReference xmlns:a="http://schemas.datacontract.org/2004/07/System.Data.Objects.DataClasses">
<a:EntityKey z:Ref="i4" xmlns:b="http://schemas.datacontract.org/2004/07/System.Data" />
</FormCrownLicAnsReference>
<FormStdLicAns i:nil="true" />
<FormStdLicAnsReference xmlns:a="http://schemas.datacontract.org/2004/07/System.Data.Objects.DataClasses">
<a:EntityKey i:nil="true" xmlns:b="http://schemas.datacontract.org/2004/07/System.Data" />
</FormStdLicAnsReference>
<FormType i:nil="true" />
<FormTypeReference xmlns:a="http://schemas.datacontract.org/2004/07/System.Data.Objects.DataClasses">
<a:EntityKey z:Id="i5" xmlns:b="http://schemas.datacontract.org/2004/07/System.Data">
<b:EntityContainerName>Editorial_MasterEntities</b:EntityContainerName>
<b:EntityKeyValues>
<b:EntityKeyMember>
<b:Key>FormType_ID</b:Key>
<b:Value i:type="c:int" xmlns:c="http://www.w3.org/2001/XMLSchema">3</b:Value>
</b:EntityKeyMember>
</b:EntityKeyValues>
<b:EntitySetName>FormType</b:EntitySetName>
</a:EntityKey>
</FormTypeReference>
<LastModified i:nil="true" />
<Manuscript z:Id="i6">
<EntityKey z:Id="i7" xmlns="http://schemas.datacontract.org/2004/07/System.Data.Objects.DataClasses" xmlns:a="http://schemas.datacontract.org/2004/07/System.Data">
<a:EntityContainerName>Editorial_MasterEntities</a:EntityContainerName>
<a:EntityKeyValues>
<a:EntityKeyMember>
<a:Key>ManuscriptID</a:Key>
<a:Value i:type="b:int" xmlns:b="http://www.w3.org/2001/XMLSchema">3000004</a:Value>
</a:EntityKeyMember>
<a:EntityKeyMember>
<a:Key>PubID</a:Key>
<a:Value i:type="b:int" xmlns:b="http://www.w3.org/2001/XMLSchema">3</a:Value>
</a:EntityKeyMember>
</a:EntityKeyValues>
<a:EntitySetName>Manuscript</a:EntitySetName>
</EntityKey>
<Editor i:nil="true" />
<EditorReference xmlns:a="http://schemas.datacontract.org/2004/07/System.Data.Objects.DataClasses">
<a:EntityKey z:Id="i8" xmlns:b="http://schemas.datacontract.org/2004/07/System.Data">
<b:EntityContainerName>Editorial_MasterEntities</b:EntityContainerName>
<b:EntityKeyValues>
<b:EntityKeyMember>
<b:Key>EditorID</b:Key>
<b:Value i:type="c:int" xmlns:c="http://www.w3.org/2001/XMLSchema">3</b:Value>
</b:EntityKeyMember>
</b:EntityKeyValues>
<b:EntitySetName>Editor</b:EntitySetName>
</a:EntityKey>
</EditorReference>
<ManuscriptID>3000004</ManuscriptID>
<ManuscriptStatus i:nil="true" />
<ManuscriptStatusReference xmlns:a="http://schemas.datacontract.org/2004/07/System.Data.Objects.DataClasses">
<a:EntityKey i:nil="true" xmlns:b="http://schemas.datacontract.org/2004/07/System.Data" />
</ManuscriptStatusReference>
<PubID>3</PubID>
<Publication i:nil="true" />
<PublicationReference xmlns:a="http://schemas.datacontract.org/2004/07/System.Data.Objects.DataClasses">
<a:EntityKey z:Id="i9" xmlns:b="http://schemas.datacontract.org/2004/07/System.Data">
<b:EntityContainerName>Editorial_MasterEntities</b:EntityContainerName>
<b:EntityKeyValues>
<b:EntityKeyMember>
<b:Key>PubID</b:Key>
<b:Value i:type="c:int" xmlns:c="http://www.w3.org/2001/XMLSchema">3</b:Value>
</b:EntityKeyMember>
</b:EntityKeyValues>
<b:EntitySetName>Publication</b:EntitySetName>
</a:EntityKey>
</PublicationReference>
<Task>
<Task z:Ref="i1" />
</Task>
<Title>test</Title>
</Manuscript>
<ManuscriptReference xmlns:a="http://schemas.datacontract.org/2004/07/System.Data.Objects.DataClasses">
<a:EntityKey z:Ref="i7" xmlns:b="http://schemas.datacontract.org/2004/07/System.Data" />
</ManuscriptReference>
<MasterPerson z:Id="i10">
<EntityKey z:Id="i11" xmlns="http://schemas.datacontract.org/2004/07/System.Data.Objects.DataClasses" xmlns:a="http://schemas.datacontract.org/2004/07/System.Data">
<a:EntityContainerName>Editorial_MasterEntities</a:EntityContainerName>
<a:EntityKeyValues>
<a:EntityKeyMember>
<a:Key>MPID</a:Key>
<a:Value i:type="b:int" xmlns:b="http://www.w3.org/2001/XMLSchema">1380007</a:Value>
</a:EntityKeyMember>
</a:EntityKeyValues>
<a:EntitySetName>MasterPerson</a:EntitySetName>
</EntityKey>
<Comments i:nil="true" />
<Created>2008-01-08T14:14:01.867</Created>
<Do_Not_Use>false</Do_Not_Use>
<Editor />
<FName>tony</FName>
<LName>kim</LName>
<MName />
<MPGUID>C6C28CFFD41A4106B3FDB4CFBBF79B63</MPGUID>
<MPID>1380007</MPID>
<Prefix i:nil="true" />
<Suffix i:nil="true" />
<Task>
<Task z:Ref="i1" />
</Task>
<Updated>2008-01-08T14:14:01.867</Updated>
</MasterPerson>
<MasterPersonReference xmlns:a="http://schemas.datacontract.org/2004/07/System.Data.Objects.DataClasses">
<a:EntityKey z:Ref="i11" xmlns:b="http://schemas.datacontract.org/2004/07/System.Data" />
</MasterPersonReference>
<TaskID>1670</TaskID>
<TaskStatus z:Id="i12">
<EntityKey z:Id="i13" xmlns="http://schemas.datacontract.org/2004/07/System.Data.Objects.DataClasses" xmlns:a="http://schemas.datacontract.org/2004/07/System.Data">
<a:EntityContainerName>Editorial_MasterEntities</a:EntityContainerName>
<a:EntityKeyValues>
<a:EntityKeyMember>
<a:Key>TaskStatusID</a:Key>
<a:Value i:type="b:int" xmlns:b="http://www.w3.org/2001/XMLSchema">3</a:Value>
</a:EntityKeyMember>
</a:EntityKeyValues>
<a:EntitySetName>TaskStatus</a:EntitySetName>
</EntityKey>
<Description>Completed</Description>
<Task>
<Task z:Ref="i1" />
</Task>
<TaskStatusID>3</TaskStatusID>
</TaskStatus>
<TaskStatusReference xmlns:a="http://schemas.datacontract.org/2004/07/System.Data.Objects.DataClasses">
<a:EntityKey z:Ref="i13" xmlns:b="http://schemas.datacontract.org/2004/07/System.Data" />
</TaskStatusReference>
</Task>
Ce fut le stylesheet qui travaillait hier, mais de toute évidence quelque chose a changé dans mon XML - vous pouvez voir les cadeaux de fidélité avec le nom local vs. XPath.
<?xml version='1.0'?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:i="http://www.w3.org/2001/XMLSchema-instance"
xmlns:z="http://schemas.microsoft.com/2003/10/Serialization/"
xmlns:c="http://www.w3.org/2001/XMLSchema"
xmlns:a="http://schemas.datacontract.org/2004/07/System.Data.Objects.DataClasses"
xmlns:b="http://schemas.datacontract.org/2004/07/System.Data"
xmlns="http://schemas.datacontract.org/2004/07/MCC.DAL">
<!--xmlns="http://schemas.datacontract.org/2004/07/System.Data.Objects.DataClasses" -->
<xsl:template match="/*">
<DIV STYLE="font-weight:bold">
Local name:<xsl:value-of select="/*[local-name()='Task']/*[local-name()='MasterPerson']/*[local-name()='FName']" /><br />
XPath:<xsl:value-of select="/Task/MasterPerson/FName"/>
</DIV>
</xsl:template>
</xsl:stylesheet>
Le problème que je vais avoir la liste les espaces de noms est que certains d'entre eux se chevauchent en fonction du contexte au niveau des tags, de sorte que pourrait être le problème résultant. Évidemment, hier, j'utilisais une autre source XML (argh) ou juste un ensemble d'objets différent. (De toute façon, si la source change, elle ne devrait pas faire exploser le XSLT comme ça.)
Maintenant, je suis relégué à utiliser l'approche de nom local(), mais j'aimerais vraiment comprendre cela.
Votre XML n'a pas un élément complet, donc je ne peux pas le charger. Si je ferme les éléments ouverts, je n'obtiens aucun résultat avec Xalan même si j'enlève les éléments de l'espace de nommage, car il n'y a pas de 'MasterPerson' dans votre exemple. –
Désolé Tim - c'était trop grand. –
@CP: Désolé pour la modification, mais j'ai trouvé assez confus de lire la réponse avant la question. ;-) J'ai également indenté le XML et l'ai rendu bien formé. Oh, et bienvenue à SO. :-) – Tomalak