Извиняюсь за основную природу этих вопросов - я новичок в XSLT (и в Stack Overflow тоже).
Мне нужно преобразовать следующий XML, возвращаемый веб-службой Sharepoint:
<GetGroupCollectionFromUser xmlns=
"http://schemas.microsoft.com/sharepoint/soap/directory/">
<Groups>
<Group ID="3" Name="Group1" Description="Description" OwnerID="1"
OwnerIsUser="False" />
<Group ID="15" Name="Group2" Description="Description"
OwnerID="12" OwnerIsUser="True" />
<Group ID="16" Name="Group3" Description="Description"
OwnerID="7" OwnerIsUser="False" />
</Groups>
</GetGroupCollectionFromUser>
в это:
<GetGroupCollectionFromUser xmlns=
"http://schemas.microsoft.com/sharepoint/soap/directory/">
<Groups>
<Group Name="Group1" />
<Group Name="Group2" />
<Group Name="Group3" />
</Groups>
</GetGroupCollectionFromUser>
По сути, мне нужно отбросить все атрибуты для каждого элемента группы, кроме имени.После долгих исследований и переделок, и, в частности, удаления объявления пространства имен из оригинального XML, я нашел кое-что, что дает мне почти именно то, что мне нужно:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" encoding="utf-8" indent="no"/>
<xsl:template match="/GetGroupCollectionFromUser">
<xsl:copy>
<xsl:apply-templates select="Groups" />
</xsl:copy>
</xsl:template>
<xsl:template match="Groups">
<xsl:copy>
<xsl:apply-templates select="Group" />
</xsl:copy>
</xsl:template>
<xsl:template match="Group">
<xsl:copy>
<xsl:apply-templates select="@Name" />
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
Однако вместо имениПриведенный выше атрибут дает мне значение атрибута Name, вставленного в виде текста в элемент Group, например:
<GetGroupCollectionFromUser>
<Groups>
<Group>Group1</Group>
<Group>Group2</Group>
<Group>Group3</Group>
</Groups>
</GetGroupCollectionFromUser>
В конечном итоге это будет использоваться сторонним приложением, которое ожидает XML, ориентированный на атрибуты.Я уверен, что упускаю что-то смущающее очевидное, но независимо от того, что я делаю с этим, я не могу использовать только атрибут Name.Два вопроса:
Как изменить XSLT так, чтобы он возвращал атрибут Name для каждого элемента Group вместо его значения в виде текста?
И как правильно обрабатывать пространство имен?Когда я включил его в XSLT, попробовав несколько методов на основе примеров, которые я нашел здесь и в других местах в Интернете, я ничего не получил обратно.
Заранее благодарим за любые советы.