Editor (o complemento) que muestra XPath actual con atributos de etiqueta al editar XML

En el borrador XML de muestra:

<unit name="Alpha">
    <unit name="One">
         █1
    </unit>
    <unit name="Two">
         █2
    </unit>
</unit>

Quiero encontrar alguna forma de mostrar XPath que contenga

  • unit@name="Alpha"/unit@name="One"cuando el símbolo de intercalación está en la posición █1

o

  • unit@name="Alpha"/unit@name="Two"cuando el símbolo de intercalación está en la posición █2

para poder editar archivos XML grandes sin colapsar su esquema y leer los atributos de nombre por mí mismo.

Idealmente, me gustaría encontrar una manera de obtener tal XPath en algún editor de texto gratuito en Windows.

Es una buena tarea para el complemento CudaText, si conoce Python. El complemento "CudaExt" ya tiene un comando que muestra la ruta actual del árbol de códigos en la barra de estado: "Mostrar la ruta actual en la barra de estado". Puedes hacer uno nuevo.
@RProgram: hm, no se trata tanto de Python como de aprender las API y bibliotecas del editor necesarias. Por el momento necesito algo listo,
Haré este complemento, si crea un módulo base de Python que encuentre la cadena XPath, desde las líneas de texto y la posición del cursor.
@RProgram: gracias, si llego tan lejos, será un esfuerzo relativamente bajo agregar el resto :) Eso que mencionas ya está hecho en el complemento Notepad ++ XML Tools (en C ++) y en el complemento VS Code XML Tools (muy probablemente en C#, pero no estoy seguro ahora mismo si su código es público). Quiero decir, ya muestran el XPath, pero como elementos sin valores de atributo. Preferiría modificar esa solución de Notepad ++. Entonces, ¿estás bien con C++ también?
Bueno, solo necesito el código de Python, ya que CudaText es multiplataforma.

Respuestas (2)

Después de que no hubo respuesta, desarrollé un script Python simple para usar con el complemento Python Script en el editor Notepad ++ . Se puede adjuntar a un método abreviado de teclado o a un icono de la barra de herramientas* para mostrar todas las etiquetas XML principales de la etiqueta que se encuentra en la posición del cursor.

import re

matches = []
def match_found(m):
 matches.append(m.group(0))

editor.research('<[A-Za-z0-9_]+[^/>]*>|</[A-Za-z0-9_]+>', match_found, 0, 0, editor.getCurrentPos())
path = []
for m in matches:
 if m[:2] == "</":
  path.pop()
 elif m[-2:] != "/>":
  path.append(m)

msg = ""
for m in path:
 msg += m + "\n"

notepad.messageBox(msg, "Parents of current tag", 0)

*) debido a un problema interno actual del complemento, el script solo funciona cuando está adjunto al segundo ícono de la barra de herramientas o superior agregado por este complemento. El primer ícono tiene problemas, adjunte algo y no haga clic en él. Una forma más efectiva es simplemente vincular un atajo de teclado a través de Configuración > Asignador de atajos > Comandos de complemento .

Intentaré adaptar este script para hacer el comando CudaText en el complemento CudaExt.
@RProgram - OK :) solo tenga en cuenta que esta es una solución rápida y sucia suficiente para mis necesidades. No maneja comentarios XML, por ejemplo. Una solución adecuada podría requerir un análisis XML regular usando la biblioteca XML y luego tal vez usar el modelo de objeto de documento creado para determinar la ruta.

El editor CudaText (gratis) tiene el complemento CudaExt (instalar en Complementos/AddonManager), da el comando "Árbol de código: Mostrar la ruta actual en la barra de estado".

Para el archivo XML, el comando muestra la ruta en el árbol XML, como en la captura de pantalla (barra amarillenta en la parte inferior). Solo nota: el cursor debe estar dentro <tag ... >, no después.

CudaTexto

Según la captura de pantalla, me temo que la ruta proporcionada por el complemento no cumple con los criterios dados en la pregunta. Los elementos de la ruta no se muestran con sus atributos. Este complemento (que muestra la ruta sin atributos) está disponible en muchos editores, pero para mí es inútil, porque si existen muchas secciones principales similares (en mi ejemplo serían "Alpha", "Beta", ....), no sabe en cuál se encuentra actualmente, si contienen cientos de registros como "uno", "dos" que requieren desplazarse hacia arriba en muchas pantallas para encontrar la etiqueta XML principal.