Ir para o conteúdo
blueomega

Strings em XQuery, Xpath, Xslt

Mensagens Recomendadas

blueomega    0
blueomega

Estou a fazer uns exercícios sobre xml pra um exame e surgiu em mais que um exame, algo que não consigo resolver(esta tudo relacionado)

Ignorar os comentários, eram alineas do exame. Aqui vai parte do XML

<?xml encoding="UTF-8"?> <!--1a)Falta a versão do xml. <?xml version="1.0" encoding="UTF-8"?>-->
<!DOCTYPE eleicao SYSTEM "eleicao.dtd" >
<?xml-stylesheet type="text/xsl" href="eleicao.xslt"?>

<eleicao>
    <tipo>presidencial</tipo>
    <totalEleitores>8806400</totalEleitores>
    <candidatos>
        <candidato id="c1" apoios="p2">Acabado</candidato>
        <candidato id="c2">Cassete</candidato>
        <candidato id="c3" apoios="p2 p3">Trotska</candidato>
    </candidatos>
    <partidos>
        <partido id="p1" nome="Laranja"/>
        <partido id="p2" nome="Rosa"/>
        <partido id="p3" nome="Lima"/>
        <!--1b)id é o tipo ID, logo unico. não podes existir 2 partidos com o id=p3"-->
        <partido id="p3" nome="Abacate"/>
    </partidos>
<eleicao>

Ao fazer expressões xquery, xslt e xpath notei que se um atributo tiver multiplos ids, não os consigo obter(ou melhor não os consigo separar e percorrer)

por exemplo no bocado do xml em baixo

<candidato id="c1" apoios="p2">Acabado</candidato>

Obter o partido de id="p2" é simples, seja em qualquer tipo de expressão.

mas em

<candidato id="c3" apoios="p2 p3">Trotska</candidato>

não consigo separar o p2 e p3 para obter a informação de cada apoio. Alguém dá uma ajuda, em principio com a ajuda em xpath devo conseguir derivar para xslt e xquery

Uma questão extra, se:

<candidato id="c1" apoios="p2">Acabado</candidato>

Se apoios for definido(no dtd por exemplo) como IDref, so pode ter um ID, se for definido como IDrefs pode ter multiplos ID's.

A questão é: Ao ter multiplos ID's, obriga que sejam todos do mesmo tipo(referir o mesmo tipo de elementos)

Cumps

Blueomega

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
blueomega    0
blueomega

lol, ja descobri a solução, era algo mesmo basico

basta algo como:

<xsl:for-each select="@apoios">
<!--do stuff-->
</xsl:for-each>

pensei que o for each era so pra elementos e não atributos

mas se alguem souber a resposta a segunda pergunta chute

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
blueomega    0
blueomega

lol, ja descobri a solução, era algo mesmo basico

basta algo como:

<xsl:for-each select="@apoios">
<!--do stuff-->
</xsl:for-each>

pensei que o for each era so pra elementos e não atributos

mas se alguem souber a resposta a segunda pergunta chute

Não sei que raio de testes fiz de manha, mas isto não é possível(salvo erro os atributos estão todos no mesmo no). resolvi com o uso de contains

Não me referi bem em cima, Rui Carlos, cada elemento so pode ter um ID, mas pode ter múltiplas referencias para outros elementos (IDREFS).

Sera que posso misturar referencias? acho que é

É possível num dtd limitar as referencias a um tipo?

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora


×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade