Приношу извинения за основной характер этих вопросов - я новичок в XSLT (и в Stack Overflow тоже).
I необходимо преобразовать следующий 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 приведенное выше дает мне значение атрибута Name, вставленного в виде текста в элемент Group, например:
<GetGroupCollectionFromUser>
<Groups>
<Group>Group1</Group>
<Group>Group2</Group>
<Group>Group3</Group>
</Groups>
</GetGroupCollectionFromUser>
Это в конечном итоге будет использовано сторонним приложением, которое ожидает ориентированный на атрибут XML. Я уверен, что мне не хватает чего-то до неприличия очевидного, но, что бы я ни делал с этим, я не могу использовать только атрибут Name. Два вопроса:
Как изменить XSLT, чтобы он возвращал атрибут Name для каждого элемента Group вместо его значения в виде текста?
И как мне правильно обрабатывать пространство имен? Когда я включил его в XSLT и попробовал несколько методов, основанных на примерах, которые я нашел здесь и в других местах в Интернете, я ничего не получил.
Заранее благодарим за любой совет.